我需要处理一个包含订单备注的大TXT文件
有些注释看起来像Note for an order
,其他注释看起来像"Note for an order"
。我需要从相应的字符串中删除"
字符,如果它位于字符串的开头和结尾。
因为文件非常大(±10MB),所以最快的方法是什么? 你会推荐我什么?
答案 0 :(得分:3)
从文件中获取每行。我假设您正在逐行阅读 - 或者如果您正在以块(或整个文件)阅读它,您将逐行处理它。在这种情况下,当您获得该行并将其弹出到$var
时,您可以使用trim()执行此类操作:
$var=trim($yourLineOrColumn, '"');
然后处理$var
。
答案 1 :(得分:2)
您可以一次阅读一行,删除“,然后保存文件
与一次加载所有文件相比,一次读取一行将占用更少的内存。因此,您可以处理任意大小的.txt
文件,仅受计算机速度的限制。
注意:我假设您使用的是Local Web Server
。任何共享主机可能不允许您覆盖30秒的最大执行时间限制。我建议在本地XAMPP服务器上使用此代码。
<?php
set_time_limit(0); //To remove the max-execution time limit
$file_from = "foo.txt"; //File containing all the text
$file_to = "bar.txt"; //New File containing all the modified text
//open both files
$fp_source = fopen($file_from, "r") or die("Couldn't open ".$file_from);
$fp_dest = fopen($file_to, 'a+') or die("Couldn't open ".$file_to);
while (!feof($fp)) { //Continue loading domains till the end of file
$line = fgets($fp, 1024); //load one line at a time
$line = trim($line, '"'); // remove the first & last "
fwrite($file_to, $line); // save text in new file.
}
fclose($file_from); //close the handles
fclose($file_to); //close the handles
?>
以上代码将替换字符串中第一个和最后一个位置出现的所有“,其中每个字符串与换行符相互区别。
如果“出现在字符串的中间,那么你可以替换这一行
$line = trim($line, '"'); // remove the first & last "
使用:
$line = str_replace('"', "", $line); // remove all the "
虽然您已将问题标记为PHP
,但如果它只是一个文件或几个文件,我建议您使用搜索&amp;替换任何桌面文本编辑器的功能,如Notepad ++等。
答案 2 :(得分:1)
像你提到的那样处理一个更大的文件将是一个密集的过程 - 我认为你可以用很多方法来优化它。或许将文件分成几个块可能会有所帮助......
在任何情况下,您所要做的就是遍历文件,每行使用trim()
函数。这是一个处理按换行符拆分字符串的相关帖子 -
How to put string in array, split by new line?
通常(默认情况下)trim()
函数会从字符串的开头和结尾删除空格字符,但是您可以指定要剪裁的任何字符...
trim — Strip whitespace (or other characters) from the beginning and end of a string.
这是一个从字符串的开头和结尾删除双引号字符的简单示例。 -
$str = '"Hello "Stack" Overflow"';
$strippedStr = trim($str,'"');
echo $strippedStr;
// OUTPUT -> Hello "Stack" Overflow
请注意,只删除了周围的引号,而单词stack
仍然用引号括起来。
删除每行的字符后,只需使用implode()
函数重新加入这些行。