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

2 に答える 2

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

ノート!メモ帳で改行を正しく表示するために、「\n」の代わりに「\r\n」を使用しました

于 2013-07-09T23:26:19.343 に答える
0

これは厳密には php ソリューションではありませんが、空白を削除することが唯一の目的である場合は、UNIX を使用するのはどうsedですか?

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

shell_exec()またはバッククォートを使用して、PHP からこれを呼び出すことができます。これも UNIX システムを使用していることを前提としていますが、ファイルを PHP にロードするオーバーヘッドがなくなります。

于 2013-07-09T23:29:59.050 に答える