2010-08-11 241 views
0

需要一點幫助,我有兩個信息源,信息通過不同的程序導出到兩個不同的CSV文件。他們應該包含相同的信息,但是這是需要檢查的。C# - 比較兩個CSV文件並給出輸出

所以我希望做的是如下:

  • 採取從兩個文件中的信息。
  • 比較
  • 輸出任何差異和差異所在的文件(例如文件A包含此文件,但文件B不包含此文件,反之亦然)。

這些文件是200,000奇數行,因此需要儘可能有效。

試過用Excel做這件事,但事實證明,它太複雜了,我真的很難找到一種編程方式。

+0

如果你對你期望找到的差異更具體 - 數據的差異還是格式,這將有所幫助?相同的行數? etc ... – Benjol 2010-08-11 12:52:25

+1

這兩個文件中的排序意味着相同嗎?該解決方案根據是否存在顯着差異。 – 2010-08-11 12:53:56

+0

好的,對不起。 差異應該在數據中,有一列ID和一列版本。 有不同數量的行。格式是相同的,例如第一列中具有X行數的ID和具有相同行數的第二列中的版本。 排序不會相同,文件A中的一行不會與文件B中的相同,或者它可能是相同的。 一個簡單的方法來描述需要做什麼可能是一個名稱列表,但他們沒有排序,只是放在表單中。我需要檢查姓是否與名字相同。 – Vibralux 2010-08-11 16:46:25

回答

1

假設文件真的應該是相同,直到文本限定符,行的排序和每個文件中包含的行數,最簡單的方法可能是簡單地遍歷兩個文件並比較每一行。

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."); 
    } 
} 
+0

謝謝,但只是增加了一些細節,因此這不起作用。 還是謝謝! – Vibralux 2010-08-12 08:06:16

1

根據您的回答你的問題的意見,如果不真正需要的是用代碼實現,你可以做的不如下載一個比較工具,這很可能更復雜。

Winmerge例如)

0

OK,其他任何人,根據Google的這一點,並認爲這。這是我的回答。

我將詳細信息導出爲CSV格式,並且在導出時爲了方便使用而以數字形式對其進行了排序。一旦將它們導出爲兩個CSV文件,我就會使用名爲Beyond Compare的程序,可以找到here。這允許比較文件。

起初我使用超越比較手動來測試我導出的是正確的等,但Beyond Compare確實有能力使用命令行進行比較。然後這會以編程方式完成所有事情,所有必須完成的操作都是用戶查看Beyond Compare中的結果。您可能可以將它們導出爲另一個CSV,我不認爲Beyond Compare的GUI非常好用,所以使用它更容易。

相關問題