【问题标题】:Is there a way to print csv file data to console if the data matches another csv file?如果数据与另一个 csv 文件匹配,有没有办法将 csv 文件数据打印到控制台?
【发布时间】:2020-06-01 03:01:05
【问题描述】:

我希望能够检查一个 csv 文件和另一个 csv 文件。如果 file1 中的第一列数据与 file2 中的第一列数据匹配,则仅打印匹配的行,而不打印其余行。我知道如何将 csv 文件打印到控制台,但想知道是否有办法做到这一点。下面有我到目前为止所做的代码,但我认为这不是正确的方法。任何帮助,将不胜感激。谢谢

operands = new ArrayList();

string[] file1 = file.ReadAllLines(@"..\..\data1.csv").Split(',');
string[] file2 = file.ReadAllLines(@"..\..\data2.csv").Split(',');

foreach (var line in file1)
{
 if (line.Split(',')[0].Equals(file2[0])
 {
   operands.AddRange(file1);
}
}



【问题讨论】:

    标签: c# csv readline


    【解决方案1】:

    您需要检查file1 每一行的第一列与file2 的每一行

    你可以试试下面

    using System;
    using System.Linq;
    using System.Collection.Generic;
    ...
    
    //ReadAllLines() returns string[], you can't split string array, you need split individual element
    string[] file1 = file.ReadAllLines(@"..\..\data1.csv");
    string[] file2 = file.ReadAllLines(@"..\..\data2.csv");
    List<string> operands = new List<string>();
    for(int i = 0; i < Math.Min(file1.Length, file2.Length); i ++)
    {
        if(file1[i].Split(',').First().Equals(file2[i].Split(',').First()))
        {                                  //^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This was missing 
            Console.WriteLine($"Line {i+1} matches first column data");
            operands.Add(file1[i]);
    
            //If you want to use ArrayList, then
            //operands.Add(file1[i]); //You were missing index i.e [i]
        } 
    }
    

    根据您更新的代码,我建议使用 List&lt;string&gt; instead of ArrayList 并将整行存储到其中。

    【讨论】:

    • 如果原始文件被存储在一个数组列表中,是否可以用这个新文件创建一个新的 ArrayList,它们彼此相等?
    • 如果是 CSV 文件,则文件将以逗号分隔的值存储。我不明白数组列表背后的逻辑是什么。您能否详细说明,如果这与您提出的问题有关,请更新您的原始问题
    猜你喜欢
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2018-09-29
    • 2021-01-27
    相关资源
    最近更新 更多