如何从字符串中删除第一个和最后一个字符

时间:2012-08-12 13:06:01

标签: php string char

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

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

3 个答案:

答案 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()函数重新加入这些行。