需要一點幫助,我有兩個信息源,信息通過不同的程序導出到兩個不同的CSV文件。他們應該包含相同的信息,但是這是需要檢查的。C# - 比較兩個CSV文件並給出輸出
所以我希望做的是如下:
- 採取從兩個文件中的信息。
- 比較
- 輸出任何差異和差異所在的文件(例如文件A包含此文件,但文件B不包含此文件,反之亦然)。
這些文件是200,000奇數行,因此需要儘可能有效。
試過用Excel做這件事,但事實證明,它太複雜了,我真的很難找到一種編程方式。
需要一點幫助,我有兩個信息源,信息通過不同的程序導出到兩個不同的CSV文件。他們應該包含相同的信息,但是這是需要檢查的。C# - 比較兩個CSV文件並給出輸出
所以我希望做的是如下:
這些文件是200,000奇數行,因此需要儘可能有效。
試過用Excel做這件事,但事實證明,它太複雜了,我真的很難找到一種編程方式。
假設文件真的應該是相同,直到文本限定符,行的排序和每個文件中包含的行數,最簡單的方法可能是簡單地遍歷兩個文件並比較每一行。
using (StreamReader f1 = new StreamReader(path1))
using (StreamReader f2 = new StreamReader(path2)) {
var differences = new List<string>();
int lineNumber = 0;
while (!f1.EndOfStream) {
if (f2.EndOfStream) {
differences.Add("Differing number of lines - f2 has less.");
break;
}
lineNumber++;
var line1 = f1.ReadLine();
var line2 = f2.ReadLine();
if (line1 != line2) {
differences.Add(string.Format("Line {0} differs. File 1: {1}, File 2: {2}", lineNumber, line1, line2);
}
}
if (!f2.EndOfStream) {
differences.Add("Differing number of lines - f1 has less.");
}
}
謝謝,但只是增加了一些細節,因此這不起作用。 還是謝謝! – Vibralux 2010-08-12 08:06:16
根據您的回答你的問題的意見,如果不真正需要的是用代碼實現,你可以做的不如下載一個比較工具,這很可能更復雜。
(Winmerge例如)
OK,其他任何人,根據Google的這一點,並認爲這。這是我的回答。
我將詳細信息導出爲CSV格式,並且在導出時爲了方便使用而以數字形式對其進行了排序。一旦將它們導出爲兩個CSV文件,我就會使用名爲Beyond Compare
的程序,可以找到here。這允許比較文件。
起初我使用超越比較手動來測試我導出的是正確的等,但Beyond Compare確實有能力使用命令行進行比較。然後這會以編程方式完成所有事情,所有必須完成的操作都是用戶查看Beyond Compare
中的結果。您可能可以將它們導出爲另一個CSV,我不認爲Beyond Compare
的GUI非常好用,所以使用它更容易。
如果你對你期望找到的差異更具體 - 數據的差異還是格式,這將有所幫助?相同的行數? etc ... – Benjol 2010-08-11 12:52:25
這兩個文件中的排序意味着相同嗎?該解決方案根據是否存在顯着差異。 – 2010-08-11 12:53:56
好的,對不起。 差異應該在數據中,有一列ID和一列版本。 有不同數量的行。格式是相同的,例如第一列中具有X行數的ID和具有相同行數的第二列中的版本。 排序不會相同,文件A中的一行不會與文件B中的相同,或者它可能是相同的。 一個簡單的方法來描述需要做什麼可能是一個名稱列表,但他們沒有排序,只是放在表單中。我需要檢查姓是否與名字相同。 – Vibralux 2010-08-11 16:46:25