0

次のコード スニペットを使用して、いくつかの行を 2 回以上繰り返すことができるファイルを読み取ろうとしています。このスクリプトの目的は、一意の行のみ (重複なし) を書き込むことですが、何らかの理由で同等性を検出していないように見えます。何かご意見は?

$handle = @fopen("Old.csv", "r");
$new = @fopen("New.csv", "w");
$last_line = null;

if ($handle && $new) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        if( $last_line != $buffer ) fwrite( $new, $buffer );
        $last_line = $buffer;
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
    fclose($new);
}

「Old.csv」の例

 apple
 apple
 orange
 grapes
 grapes
 grapes

「New.csv」は次のようになります。

apple
orange
grapes

しかし、それは「Old.csv」の正確なコピーになってしまいます。

4

2 に答える 2

0

回答してくださった皆様、ありがとうございました。Mac を使用しているという手がかりをうっかり忘れてしまいました。Windows 形式を使用するように CSV を再保存し、スクリプトを再実行しましたが、すべて問題ありませんでした。行末だったと思います。とにかく、肝心なのは、スクリプトが機能するということです。

于 2013-05-11T05:50:40.543 に答える