关于在文件指定位置插入字符的问题。

CodeBus 2010-08-06 10:44:31
txt文件中保存内容为"012356789",我想在3和5中间插入字符"4",使文件内容变成"0123456789"。
我用fseek($fp,4)定位到3的位置,然后fwrite($fp,4)会把后面的5替换掉。

因为文件很大,所以不可能全部重写3以后的字符。
有没有更好的方法完成插入操作呢?
...全文
220 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
a63833825 2011-05-25
  • 打赏
  • 举报
回复
我也想知道
CodeBus 2010-08-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xuzuning 的回复:]

没有更好的办法,txt文件是顺序结构你必须向后移动插入点以后的内容。
其实也是很方便的。

$ch = '4';
$offs = 4;
$len = strlen($ch);

$fp = fopen($filename, 'r+');
fseek($fp, $offs, SEEK_SET);
$buf = fread($fp, $len);
do {
fseek($f……
[/Quote]
每次只缓存strlen($ch)长度的字符,学习了。。
谢谢老大
CodeBus 2010-08-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dingsongtao 的回复:]

文件不会只有一行吧??
你一行行的读,再替换呢。

fseek($fp,3)或者你定位到3
fwrite($fp, '345');不知道可以不
[/Quote
这样会把"56"替换成"45"
Dleno 2010-08-06
  • 打赏
  • 举报
回复
文件不会只有一行吧??
你一行行的读,再替换呢。

fseek($fp,3)或者你定位到3
fwrite($fp, '345');不知道可以不
xuzuning 2010-08-06
  • 打赏
  • 举报
回复
没有更好的办法,txt文件是顺序结构你必须向后移动插入点以后的内容。
其实也是很方便的。

$ch = '4';
$offs = 4;
$len = strlen($ch);

$fp = fopen($filename, 'r+');
fseek($fp, $offs, SEEK_SET);
$buf = fread($fp, $len);
do {
fseek($fp, -$len, SEEK_CUR);
fwrite($fp, $ch);
$ch = $buf;
} while($buf = fread($fp, $len));
fwrite($fp, $ch);
fclose($fp);
CodeBus 2010-08-06
  • 打赏
  • 举报
回复
没有什么规律,看来不能在文件中完成插入操作。
换个问题,有没有人了解树的结构如何具体在文件中存储的?比如Btree,按照缩进来确立父子关系吗?
无笔秀才 2010-08-06
  • 打赏
  • 举报
回复
恩 这样挺不错的。先用正则匹配出35 ,然后替换成345
只是这样会不会把所有的内容都重新写到一个新的文件里了?
楼主说因为文件很大,会不会有什么影响呢。
CunningBoy 2010-08-06
  • 打赏
  • 举报
回复
从逻辑上讲你只能文件全部搜索一边替换,除非你还有其他规律。
CodeBus 2010-08-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cunningboy 的回复:]

PHP code
$newContent = preg_replace("/(3)(5)/is", "\\1"."4"."\\2", file_get_contents($filename));
fwrite($fp, $newContent);
[/Quote]
谢谢,可是文件很大,我不可能全部读出来再写。
CunningBoy 2010-08-06
  • 打赏
  • 举报
回复
$newContent = preg_replace("/(3)(5)/is", "\\1"."4"."\\2", file_get_contents($filename));
fwrite($fp, $newContent);

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧