【问题标题】:Remove all the empty lines from a file从文件中删除所有空行
【发布时间】:2013-07-10 09:39:25
【问题描述】:

我有以下脚本,它应该循环遍历文件的内容并删除所有空行,然后只重写没有空行的文件。无需写入文件,或者换句话说,只需让它回显该行,它就可以完美地工作。但是,当我尝试让它写入文件时,它只会删除文件的所有内容。不返回任何错误。我对脚本运行的新方式持开放态度,所以无论如何要实现我正在寻找的东西都会很棒。提前致谢。

error_reporting(E_ALL);
ini_set('display_errors', true);

$filenameindex = "somefile";
$filecont = file($filenameindex);
$fileindex = fopen($filenameindex, "w") or die("can't open file");
foreach($filecont as $line)
{
    if(strlen($line) > 0)
    {
        fwrite($fileindex,$line);    
    }
}  
fclose($fileindex);

【问题讨论】:

    标签: php file-io


    【解决方案1】:

    这不是一个严格的 php 解决方案,但如果您的唯一目标是删除空格,那么仅使用 UNIX sed 怎么样?

    sed -i '/^$/d' /somewhere/somefile.txt
    

    您可以在 PHP 中使用 shell_exec() 或反引号调用它。这也是假设您使用的是 UNIX 系统,但它会消除将文件加载到 PHP 的开销。

    【讨论】:

    • 抱歉忘记了。
    【解决方案2】:

    您可以使用 preg_replace 来做到这一点

    $filename = "somefile.txt";
    $str = file_get_contents($filename);
    $str = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\r\n", $str);
    file_put_contents($filename, $str);
    

    注意! 为了在记事本中正确显示换行符,我使用“\r\n”而不是“\n”

    【讨论】:

    • 只是将所有内容移动到同一行并在移动位置之间放置一个句点。我之前尝试过使用 preg_replace 但始终无法正常工作...
    • 哦,对不起..你是用记事本打开文件吗?如果是,则必须使用 "\r\n" 换行。所以 preg_replace 行应该是这样的: $str = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/" , "\r\n", $str);
    猜你喜欢
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2012-12-07
    • 2011-10-01
    • 1970-01-01
    • 2018-03-11
    相关资源
    最近更新 更多