对所有行指定位置插入符号

weixin_37923491 2017-11-29 03:03:10

<?php
$fp = fopen("20171119-1.txt","r");
$str = "";
while(! feof($fp))
{
$str .= fgets($fp);//."<br />";//."\r\n";//
}
//echo $str;不显示

$cyfile = fopen("20171119-1.txt", "w") or die("Unable to open file!");

function insertToStr1($str, $i, $substr){

$startstr="";
for($j=0; $j<$i; $j++){
$startstr .= $str[$j];
}
$laststr="";
for ($j=$i; $j<strlen($str); $j++){
$laststr .= $str[$j];
}

$str = ($startstr . $substr . $laststr);

return $str;
}

$newStr=insertToStr1($str, 2, "!@!");
fwrite ($cyfile,$newStr);

fclose($cyfile);

?>


目前写的就只有这个,但是没办法做到循环到第二行的操作。。。起码有2W+行需要这样操作
这个也是更具baidu写的。
求大神们指点

20171119.txt格式
010024556
010024587

想要的效果
01!@!0024556
01!@!0024587
...全文
179 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2017-11-30
  • 打赏
  • 举报
回复
当然可以 这就要看你的智慧了
weixin_37923491 2017-11-30
  • 打赏
  • 举报
回复
引用 6楼xuzuning 的回复:
对字符串插入后,子串的长度就会发生变化,可能会影响到你预定的偏移位置 所以你这种情况宜先将字符串切割成小段,处理完之后再组装起来
可以根据偏移位置的逻辑进行重新设定吗? 加号分隔符的数据大概会有单行700+字符,这样服务器应该会爆吧…
xuzuning 2017-11-29
  • 打赏
  • 举报
回复
对字符串插入后,子串的长度就会发生变化,可能会影响到你预定的偏移位置 所以你这种情况宜先将字符串切割成小段,处理完之后再组装起来
weixin_37923491 2017-11-29
  • 打赏
  • 举报
回复
首先,txt文档内容都是一个规则,其次中间会有空格的存在, 例如: 01006345185428526635475 1 0PGPP / 0101 FFVV ORHSPTXW4L HUANG/YU ZHOU 01008744525428526635475 2 0PGPP / 0101 FFVV ORHSPTXW4L TEST/TEST 后面还有很多很多,取第一个字段是 开始位置1 ,2个字节(就是之前您给我看的),第二个是开始位置3,8个字节..........等等
xuzuning 2017-11-29
  • 打赏
  • 举报
回复
是的,不过具体情况要具体分析,不能一概而论
weixin_37923491 2017-11-29
  • 打赏
  • 举报
回复
再请问,如果一行里面有64多格地方需要加分隔符的话,还是用这个吗?
xuzuning 2017-11-29
  • 打赏
  • 举报
回复
$filename = '20171119.txt';
echo "操作前原始\n";
readfile($filename);
$ar = file($filename);
foreach($ar as $k=>$v) $ar[$k] = insertToStr1($v, 2, "!@!");
file_put_contents($filename, $ar);
echo "操作后\n";
readfile($filename);

function insertToStr1($str, $i, $substr) {
  return substr($str, 0, $i) . $substr . substr($str, $i);
}
hongmei85 2017-11-29
  • 打赏
  • 举报
回复

$arr = range('110000000','110024756');
file_put_contents('20171119-1.txt', implode($arr,"\r\n"));

$str = file_get_contents('20171119-1.txt');
 
$str = preg_replace("#(..)(.+)#",'\1!@!\2',$str);
file_put_contents('20171119-1kkk.txt', $str);
echo('done!');

21,882

社区成员

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

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