2011-03-01 50 views
0

我需要找出兩個csv文件之間的區別編程。 有什麼方法可以找出不使用任​​何循環的區別?比較在C#中使用兩個csv文件#

請幫幫我。

+0

你需要什麼格式的差異? – Oded 2011-03-01 12:16:11

+0

如果你需要不同的數據,比你需要。如果您只需要知道文件是否不同於 – Stecya 2011-03-01 12:16:43

+1

將兩個csv文件讀入列表中,然後應用Linq設置操作 – 2011-03-01 12:16:58

回答

1

你看的下一行以下鏈接?
如果沒有,那麼你應該。

+0

herbalessence-我嘗試了上面鏈接中給出的linq方法。但對於有50000條記錄的csv,需要30秒才能返回結果。所以我試着用第二個鏈接給出的hashset,它只需要2 300毫秒到2秒。謝謝 – Vishnu 2011-03-02 07:13:26

+0

@Anish:歡迎:-) – 2011-03-02 07:47:32

0

不,沒有使用循環是沒有辦法的。您如何期望任何比較算法在不使用循環的情況下迭代文件的字符/單詞/標記/行?

  • 嘗試分割文件分成行
  • 在循環
    • 分割各行作爲List<string>或作爲陣列
    • 比較:

      無論如何,假設兩個CSV是由一個ID列排序這兩個文件的列表(忽略尾隨空列等)

    • 當找到數據列的差異時將包含差異的新行保存到一個List<List<string>>
    • 當發現不同的ID,比較這兩個ID:具有較小ID保存行(其中標識附加行),並獲得該文件
3

多少信息,你需要了解有什麼不同?如果你所需要的只是事實,他們是不同的,並且沒有循環的要求已經修復,你可以嘗試採用MD5散列並比較兩個散列。如果你不關心的內存使用情況,你可以只轉儲整個流爲MemoryStream呼叫Getbytes,然後將兩個數組傳遞到Enumerable.SequenceEqual

private static byte[] GetFileHash(string filename) 
{ 
    using(var stream = new FileStream(filename, FileMode.Open)) 
    { 
     var md5Hasher = new MD5CryptoServiceProvider(); 
     return md5Hasher.ComputeHash(stream); 
    } 
} 

var file1hash = GetFileHash("file1.ext"); 
var file2hash = GetFileHash("file2.ext"); 

var areEqual = Enumerable.SequenceEqual(file1hash, file2hash); 

現在有循環使用,只是不是你。