2013-07-09 206 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