0

我需要处理一个包含订单注释的大 TXT 文件。
有些音符看起来像Note for an order,有些像"Note for an order". 如果在字符串的开头和结尾,我需要"从相应的字符串中删除字符。

因为文件很大(±10MB),最快的方法是什么?你会推荐我什么?

4

3 回答 3

3

从文件中获取每一行时检查每一行。我假设您正在逐行阅读它 - 或者如果您正在逐块阅读它(或整个文件),那么您正在逐行处理它。在那种情况下,当你得到这条线并将它弹出到 a中时,你可以用trim ()$var做这样的事情:

$var=trim($yourLineOrColumn, '"');

然后$var改为处理。

于 2012-08-12T13:15:52.707 回答
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,但如果它只有一个文件或几个文件,我建议使用任何桌面文本编辑器的搜索和替换功能,如 Notepad++ 等。

于 2012-08-12T14:13:46.847 回答
1

像您提到的那样处理一个较大的文件将是一个密集的过程-我认为您不会有很多方法可以优化它。也许将文件分成几个块可能会有所帮助...

在任何情况下,您所要做的就是遍历文件并为每一行使用该trim()函数。这是一篇处理按换行符拆分字符串的相关帖子- 如何将字符串放入数组中,按换行符拆分?

通常(默认情况下)该trim()函数将从字符串的开头和结尾去除空白字符,但您可以指定要修剪的任何字符...

trim — 从字符串的开头和结尾去除空格(或其他字符)。

这是一个从字符串的开头和结尾删除双引号字符的简单示例。-

$str = '"Hello "Stack" Overflow"';
$strippedStr = trim($str,'"');
echo $strippedStr;

// OUTPUT -> Hello "Stack" Overflow 

请注意,仅删除了周围的引号,而单词stack仍被引号包裹。

删除每行的字符后,只需使用该implode() 功能重新加入行。

于 2012-08-12T13:16:12.457 回答