-2

我需要像这样获取两个 csv 文件的区别

comm -13 <(sort file1.csv) <(sort file2.csv) > file3.csv

这很好用,但是如何从 PHP 实现相同的过程,一些提示可以为我指明正确的方向。(已编辑)

ABC, 12, 1
DEF, 10, 1
GHI, 0, 0

ABC, 8, 1
DEF, 10, 1
GHI, 2, 0

最终的 CSV 应该是这样的:

ABC, 8, 1
GHI, 2, 0

没有 exec() 可以使用,那么您将如何使用 PHP 以有效的方式处理这个问题?

我在下面尝试了 Marc 的解决方案:

<?php
    $file1 = file('file1.csv');
    $file2 = file('file2.csv');

    sort($file1);
    sort($file2);

    var_dump($file1);
    var_dump($file2);

    $diff =  array_diff($file2, $file1);

    var_dump($diff);

?>

返回这个

ABC, 8, 1
DEF, 10, 1
GHI, 2, 0

当我手动对它们进行预排序时,它工作正常。然而,当我在应用排序后转储数组时,它们似乎已排序?

问题似乎是最后一行后面没有换行符。

$file1 = file('file1.csv',FILE_IGNORE_NEW_LINES);
$file2 = file('file2.csv',FILE_IGNORE_NEW_LINES);

FILE_IGNORE_NEW_LINES似乎可以修复它。

因此,如果您添加 FILE_IGNORE_NEW_LINES,Marc 的解决方案将非常有效。

4

1 回答 1

1
$file1 = file('file1.csv');
$file2 = file('file2.csv');

$sorted1 = sort($file1);
$sorted2 = sort($file2);

/// mangle arrays to remove columns 1,3 here...

$diff = array_diff($mangled1, $mangled2);
file_put_contents('file3.csv', implode($diff));
于 2012-12-30T15:32:24.603 回答