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

时间:2010-08-11 12:46:33

标签: c# csv

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

因此我想做的事情如下:

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

(例如Winmerge

答案 2 :(得分:0)

好的,对于其他任何人来搜索这个并找到了这个。这是我的答案。

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

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