【问题标题】:How to convert csv file's specific column to string List如何将csv文件的特定列转换为字符串列表
【发布时间】:2014-06-23 05:28:57
【问题描述】:

有谁知道如何将 csv 文件中的特定列转换为字符串 List ? 我正在尝试从 csv 文件中获取“联系电话”列表。 (请在下面查看我的 csv 文件)

打算做

List<string> contactNumberList = new List<string>();
-- contactNumberList.Add("1888714"); (Manual)
---contactNumberList.Add("1888759");(Manual)

在我的 CSV 文件中

"Email","Opt In Date","Opted Out","Opt In Details","Email Type","Opted Out Date","Opt Out Details","Contact Number","Salutation"
"test1@testApp.com","05/01/2014 11:23 AM","F","User Name: capn@goldpop.org.uk. IP Address: 62.213.118.139","0","","","1888714","Mrs Hall"
"test2@testApp.com","05/01/2014 11:23 AM","F","User Name: capntransfer@goldpop.org.uk. IP Address: 62.213.118.139","0","","","1888759","Mrs Heyworth"

【问题讨论】:

标签: c# linq c#-4.0


【解决方案1】:

对于解析 CSV,我建议使用 ligrary a s,如果值被转义,则简单地按行/列分隔符进行拆分可能会导致错误。

即

“约翰先生,鲍勃·史密斯”

是一个有效的 CSV,因为它是用引号转义的。但是拆分功能将停止工作。

一个有效的选择是 LumenWorks(您可以在 NuGet 中找到它)。

即

using (var csv = new CsvReader(r, false, csvParserConfiguration.ColumnSeparator, '"', '"', '#', ValueTrimmingOptions.None))
{            
 // Read lines
 while (csv.ReadNextRecord())
 {
  contactNumberList.Add[7];
 }
}

【讨论】:

    【解决方案2】:

    逐行读取文件,Split() 用逗号,选择所需的列,去掉引号并添加到列表中?

    【讨论】:

      【解决方案3】:

      试试这个:

      int columnId = 3;
      string[] lines = File.ReadAllLines(@"C:\test.csv");
      var list = lines.Select(line => 
             { var values = line.Split(';');
               return values[columnId];
             });                        
      

      【讨论】:

      • 为什么使用内联函数而不是直接使用lines.Select(line => line.Split(';')[columId]) ?
      • 我不能这样使用 IEnumerable strings = System.IO.File.ReadAllLines(silverpopDownloadedFile) .Select(x => x.Split(',')[7]);因为每次生成 csv 文件时,“联系电话”都可以是任何位置。现在是 7 点。下次可能是 5 点
      【解决方案4】:

      您可以尝试以下方法:

      var reader = new StreamReader(File.OpenRead(@"C:\test.csv"));
      List<string> contactNumbersList = new List<string>();
      while (!reader.EndOfStream)
      {
         var line = reader.ReadLine();
         var values = line.Split(',');
         contactNumbersList.Add(values[7]);
      }
      

      但更好的是,您可以使用像 CSV Reader 这样的专用库。

      【讨论】:

      • 对不起。 ContactNumber 位置可能会改变。今天7点。明天5点。
      • 通过检查 CSV 的第一行(列标题),您可以找到联系号码的列索引,然后在进一步读取 csv 行时使用该索引。
      【解决方案5】:
      IEnumerable<string> strings = System.IO.File.ReadAllLines({filepath})
                                        .Select(x => x.Split(';')[{columnId}])
      

      【讨论】:

        猜你喜欢
        • 2018-08-04
        • 2020-01-03
        • 2017-03-29
        • 1970-01-01
        • 2012-11-05
        • 2022-01-03
        • 2016-11-05
        • 2017-11-07
        • 2016-06-24
        相关资源
        最近更新 更多