C# – 比较两个CSV文件并提供输出

需要一些帮助,我有两个信息来源,信息被不同的程序导出到两个不同的CSV文件。 它们应该包含相同的信息,但这是需要检查的内容。

因此,我想做的是如下:

  • 从两个文件中获取信息。
  • 相比
  • 输出任何差异以及差异所在的文件。(例如,文件A包含此文件,但文件B没有,反之亦然)。

文件是200,000个奇数行,因此需要尽可能有效。

尝试用Excel做这件事但事实certificate太复杂了,我真的很难以编程方式找到一种方法。

假设文件确实应该是相同的 ,直到文本限定符,行的排序和每个文件中包含的行数,最简单的方法可能是简单地迭代两个文件并比较每一行。

using (StreamReader f1 = new StreamReader(path1)) using (StreamReader f2 = new StreamReader(path2)) { var differences = new List(); 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."); } } 

根据您对问题的评论的答案,如果不需要完成代码,您可能会比下载比较工具更糟糕,这可能更复杂。

(例如Winmerge )

好的,对于其他任何人来搜索并发现这一点。 这是我的答案。

我将详细信息导出为CSV,并在导出时以数字方式对其进行排序以方便使用。 一旦将它们导出为两个CSV文件,我就会使用一个名为Beyond Compare的程序,可在此处找到。 这允许比较文件。

起初我手动使用Beyond Compare来测试我导出的内容是否正确等,但Beyond Compare确实能够使用命令行进行比较。 然后,这会以编程方式完成所有操作,所有必须完成的操作是用户在Beyond Compare查看结果。 您可以将它们导出到另一个CSV,我看起来并不像Beyond Compare的GUI非常好用,所以使用它更容易。