2013-07-09 158 views
0

我有以下脚本应该循环遍历文件的内容并删除所有空行,然后仅在没有空行的情况下重写文件。如果不用写入文件,或者用其他词语来回显文件,它就能完美地工作。但是,当我试图将其写入文件时,它只会擦除文件的所有内容。没有错误返回。我愿意开发新的脚本运行方式,因此无论如何要实现我所期待的将会很棒。提前致谢。删除文件中的所有空行

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); 

回答

0

这不是一个纯粹的php解决方案,但是如果你唯一的目标是删除空格, UNIX sed

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

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

+0

完美的工作!谢谢 –

+0

这很好 - 接受答案,这对其他人很明显。 – calcinai

+0

对不起,忘了。 –

0

可以使用的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”

+0

只是将所有内容移动到同一行,并在它移动它的位置之间放置一段时间。我试图使用preg_replace之前,但永远不能让它正常工作... –

+0

哦,对不起..你用记事本打开文件?如果是,则必须使用“\ r \ n”作为换行符。 因此,preg_replace行应如下所示: $ str = preg_replace(“/(^ [\ r \ n] * | [\ r \ n] +)[\ s \ t] * [\ r \ n] + /“,”\ r \ n“,$ str); – Sph1nX