2011-03-01 104 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); 

现在有循环使用,只是不是你。