C# 比较两个csv文件的特定列

C# 比较两个csv文件的特定列,c#,csv,C#,Csv,我有两个csv文件,每个文件有18列……我想用c#比较第一个文件的第一列和第二个文件的第一列,以及第一个文件的第三列和第二个文件的第三列,当发现差异时,我想保存到另一个文件中,这样第三个文件应该有两列作为输出。所以我需要知道哪一列是第一列,哪一列是第三列,然后进行比较 有什么建议吗?基本方法是逐行读取每个文件,然后拆分每个字符串。对于CSV文件,通常使用逗号作为分隔符,但也可以使用制表符或类似的字符。所以,使用你拥有的。然后你会得到类似的结果 string line;

我有两个csv文件,每个文件有18列……我想用c#比较第一个文件的第一列和第二个文件的第一列,以及第一个文件的第三列和第二个文件的第三列,当发现差异时,我想保存到另一个文件中,这样第三个文件应该有两列作为输出。所以我需要知道哪一列是第一列,哪一列是第三列,然后进行比较


有什么建议吗?

基本方法是逐行读取每个文件,然后拆分每个字符串。对于CSV文件,通常使用逗号作为分隔符,但也可以使用制表符或类似的字符。所以,使用你拥有的。然后你会得到类似的结果

        string line;
        System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.csv");
        while ((line = file.ReadLine()) != null)
        {
            var arr = line.Split(new char[] { ',' });
            // do your comparison
        }

虽然你需要打开2个文件。然后可以将文件1中的数组与文件2中的数组进行比较(将索引放入数组==列,从0开始)。微笑着,您可以使用String.Join再次创建输出。

将2张excel工作表浏览到2个Datatable。Comapre 2个表格,如果有差异,则将其放入新表格中


最后将表格导出到Excel

将其导入excel或电子表格(以适用的为准),然后检查,为什么C#?问题在哪里?您是否已将CSV导入到数据结构中?问题实际上只是读取CSV吗?你应该把这个问题缩小一点——目前这个问题太宽泛了。@Anonymous:你可以想象,因为他试图通过编程来解决这个问题。。。编程的一个要点是自动化。说“为什么不手工做呢?”并不是一个很有帮助的评论……只是一个建议,如果他是出于爱好而做,那么我不会限制。@Konstantinos:我想说的不是我想要更多关于你在做什么的细节,而是你的问题应该集中在你正在做什么的一部分。如果您在读取CSV文件时遇到问题,请发布相关问题。如果一旦你在数据结构中找到了它们,你在进行比较时遇到了问题,那么就发布另一个关于这个问题的问题,等等。值得一提的是,这个简单的csv解析可能会工作,但是如果你转义了逗号(即引号),那么这将错误地分割…你是对的。String.Split可以很好地处理字符-字符可以是“,”,“\t”,“等等。如果你有一个由几个字符组成的分隔符,你可能需要修剪你之后得到的字符串,要么使用string.trim,要么使用string.Substring,而使用string.Substring,你需要做很多计算。Andreas:我的观点是,如果我想将
Hi,Andreas
编码为字段1和
Hola,安德烈亚斯
作为字段2,然后在CSV中它将是“你好,安德烈亚斯”,“你好,安德烈亚斯”。在逗号上拆分,而不担心逗号是否在引号中,这样做是错误的。好的,从来没有遇到过这种情况(但只适用于最基本的CSV文件)。我的理解是,在创建文件时,您只需使用一个选项卡而不是一个(总是想知道,如果它们是“任何单独的值”,为什么称为CSV)。如果使用“”,则必须在结果数组中添加一些逻辑,并重新定位单个条目,然后进行修剪。(或者编写自己的拆分代码。)在这种情况下,可能会有(很多?)更简单的解决方案。一切都取决于CSV格式。是的。您的方法通常是有效的,如果它只是数字的(例如),您永远不会有问题。你只需要知道你的数据和它可能是什么样子。这就是为什么一般建议找到一个预先存在的解析器的原因之一。上一次我写了一个CSV解析器,但最后我不得不写一个状态机并逐个字符地检查。如果您想查看这种格式的示例,只需将单元格中带有逗号的excel文件保存为CSV,您就可以看到它的工作方式。