我需要处理一个包含订单注释的大 TXT 文件。
有些音符看起来像Note for an order
,有些像"Note for an order"
. 如果在字符串的开头和结尾,我需要"
从相应的字符串中删除字符。
因为文件很大(±10MB),最快的方法是什么?你会推荐我什么?
从文件中获取每一行时检查每一行。我假设您正在逐行阅读它 - 或者如果您正在逐块阅读它(或整个文件),那么您正在逐行处理它。在那种情况下,当你得到这条线并将它弹出到 a中时,你可以用trim ()$var
做这样的事情:
$var=trim($yourLineOrColumn, '"');
然后$var
改为处理。
您可以一次读取一行,删除"并保存文件。
与一次加载所有文件相比,一次读取一行将占用更少的内存。因此,您可以处理任何大小的.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
,但如果它只有一个文件或几个文件,我建议使用任何桌面文本编辑器的搜索和替换功能,如 Notepad++ 等。
像您提到的那样处理一个较大的文件将是一个密集的过程-我认为您不会有很多方法可以优化它。也许将文件分成几个块可能会有所帮助...
在任何情况下,您所要做的就是遍历文件并为每一行使用该trim()
函数。这是一篇处理按换行符拆分字符串的相关帖子-
如何将字符串放入数组中,按换行符拆分?
通常(默认情况下)该trim()
函数将从字符串的开头和结尾去除空白字符,但您可以指定要修剪的任何字符...
这是一个从字符串的开头和结尾删除双引号字符的简单示例。-
$str = '"Hello "Stack" Overflow"';
$strippedStr = trim($str,'"');
echo $strippedStr;
// OUTPUT -> Hello "Stack" Overflow
请注意,仅删除了周围的引号,而单词stack
仍被引号包裹。
删除每行的字符后,只需使用该implode()
功能重新加入行。