2016-08-04 54 views
1

我想解析一个CSV文件,并在每行或第一列中提取第一个字符串,因为它是在MS Excel中布局的。 我正在使用CsvParserRead()方法将string[]返回到row变量。 的问题是,它返回的每一个值,所以我出看起来像这样的每一行:使用CSVHelper从CSV行中只获取第一列值

20070330 00:00 // This is the value I want to reference 
0.9312 
0.9352 
0.9298 
0.9343 

我怎么只能引用的文件在这些位置的值,而不投入计数器跳过临时值?

enter image description here

using (TextReader reader = File.OpenText(folder)) 
     { 
      var datesInCsv = new List<string>(); 
      var parsedCsv = new CsvParser(reader); 
      while (true) 
      { 
       var row = parsedCsv.Read(); 
       if (row.IsNullOrEmpty()) 
       { 
        break; 
       } 
       foreach (var date in row) 
       { 
        Console.WriteLine(date); 
       } 

       Console.ReadLine(); 
      } 

     } 
+0

你是否设法编译过这段代码,或者直接从编译器中得到错误? – Steve

+0

当我删除不相关的部分时,必须粘贴它。 Repasted –

+0

仍然我找不到应用于Read的返回值的IsNullOrEmpty方法。你使用[这个库](https://github.com/JoshClose/CsvHelper)? – Steve

回答

1

您正在使用的CsvHelper library要求您在构建CsvParse类的实例时传递CsvConfiguration实例。这对于让图书馆理解并正确解析您的行很重要

要给出的最重要的事情是定界符属性的值。换句话说,用来分隔一个字段和下一个字段的字符。
你应该看看你的CSV文件,并把适当的价值下面。
(在这个例子中我用了分号,但根据您的文件进行更改)

看着你的代码,我还认为,配置SkipEmptyRecords可以用来简化代码。

using (TextReader reader = File.OpenText(folder)) 
{ 
    var datesInCsv = new List<string>(); 
    CsvConfiguration config = new CsvConfiguration(); 
    config.Delimiter = ";"; 
    config.SkipEmptyRecords = true; 
    var parsedCsv = new CsvParser(reader, config); 

    string[] row = null; 
    while ((row = parsedCsv.Read()) != null) 
    { 
     // This IsNullOrEmpty doesn't exist according 
     // to Intellisense and the compiler. 
     // if(row.IsNullOrEmpty) 

     // At this point the row is an array of strings where the first 
     // element is the value you are searching for. No need of loops 
     Console.WriteLine(row[0]); 
     Console.ReadLine(); 
    } 

} 

的CsvParser实例的Read方法相应分裂输入线到您的分隔符后返回一个字符串数组。在这一点上,你只需要引用数组的第一个元素而没有任何循环。

0

你需要“阅读”的记载,并通过了“映射”的说法你想要的。可以通过索引或名称。

看到这里在完成上述各部分:

foreach (var date in row) 
{ 
    Console.WriteLine(date); 
} 

这foreach循环遍历当前行的所有elemtens:

https://joshclose.github.io/CsvHelper/

1

你被明确每个值打印到控制台这里并打印出来。

替换这个循环,这将只打印的第一个元素(索引为0):

Console.WriteLine(row[0]); 

当然,如果该行是空的这可能会失败,所以你需要检查的是,太。

相关问题