我有兩個csv文件,並且都具有相同的數據結構。如何區分CSV文件中的數據
ID - Join_date - Last_Login
我想比較,並獲得基於這個例子精確匹配的記錄數:
第一文件有100條記錄,其中不包括在第二檔20。
第二個文件有120條記錄。
我想在PHP腳本來比較這兩個文件,並建立兩個獨立的CSV文件。
我想從第二個文件中刪除第一個文件中沒有包含的所有額外記錄。
並刪除第一個文件中未包含在第二個文件中的所有記錄。
感謝
我有兩個csv文件,並且都具有相同的數據結構。如何區分CSV文件中的數據
ID - Join_date - Last_Login
我想比較,並獲得基於這個例子精確匹配的記錄數:
第一文件有100條記錄,其中不包括在第二檔20。
第二個文件有120條記錄。
我想在PHP腳本來比較這兩個文件,並建立兩個獨立的CSV文件。
我想從第二個文件中刪除第一個文件中沒有包含的所有額外記錄。
並刪除第一個文件中未包含在第二個文件中的所有記錄。
感謝
有一個GNU工具comm
,將做到這一點真的很容易。你可以通過php或者直接做exec
。如果您無權訪問comm
,最簡單的做法是將這兩個文件存儲在一個數組中(可能通過file()
)並使用array_intersect()
。
你一個嘗試一下本作CSV文件的數量有限..如果你有一個非常大的CSV我會建議你將其導入直接到MySQL
function csvToArray($csvFile, $full = false) {
$handle = fopen ($csvFile, "r");
$array = array();
while (($data = fgetcsv ($handle)) !== FALSE) {
$array [] = ($full === true) ? $data : $data[0]; // Full array or only ID
}
return $array;
}
$file1 = "file1.csv" ;
$file2 = "file2.csv" ;
$fileData1 = csvToArray($file1);
$fileData2 = csvToArray($file2);
var_dump(array_diff($fileData1,$fileData2));
var_dump(array_intersect($fileData1,$fileData2));
@TheJolly:請刪除「謝謝」和類似的當編輯功能](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts)。謝謝! – sarnold 2012-04-04 22:57:09