0

我有以下代码片段,我试图用它来读取一个文件,其中一些行可能重复两次或更多次。该脚本的目标是只编写唯一的行(不重复),但由于某种原因,它似乎没有检测到相等性。有什么想法吗?

$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

1

在命令提示符下尝试cat old.csv | sort -u > new.csv它要快得多。

于 2013-05-11T05:26:46.847 回答
0

感谢大家的回复。我无意中遗漏了一个线索,那就是我在 Mac 上。我重新保存了 CSV 以使用 Windows 格式并重新运行我的脚本,一切都很好。我猜这是行尾。无论如何,底线是脚本有效。

于 2013-05-11T05:50:40.543 回答