从字符串的开头和结尾修剪双引号


Trim double quotes from start and end of a string

我需要处理一个包含订单注释的大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() 函数重新连接这些行即可。