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