-2

このように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でこれを効率的に処理するにはどうすればよいでしょうか。

私は以下のマークからの解決策を試しました:

<?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 に答える