2017-01-22 61 views
0

我试图用CSVHelper将提供的CSV文本读入列表中,但它跳过了一些记录。Csvhelper没有正确解析列表

我在下面的图片中记录了红色,这样为了让我的问题更加清楚,它只会将这些红色字段(共52个)添加到列表中,但不会在后面添加逗号分隔文本,例如:488273,1482 ,14526113。它增加了第一个,但跳过了1482和14526113.我还需要添加这些。

代码

csv.Configuration.HasHeaderRecord = false; 
csv.Configuration.TrimFields = false; 

List<int> playerInfo = csv.GetRecords<int>().ToList(); 

图片

的红色标记不仅这些,而是​​让一个examle,它是关于所有第一的记录。 CSV

回答

0
using System; 
using System.Collections.Generic; 
using System.IO; 
using CsvHelper; 

namespace stack1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //list of int 
      var result = new List<int>(); 
      //total 
      int sum=0; 
      int recordValue; 
      using (TextReader fileReader = File.OpenText(@"C:\sample.csv")) 
      { 
       var csv = new CsvReader(fileReader); 
       csv.Configuration.HasHeaderRecord = false; 
       csv.Configuration.TrimFields = false; 

       while (csv.Read()) 
       { 
        for (var i = 0; csv.TryGetField(i, out recordValue); i++) 
        { 
         result.Add(recordValue); 
         sum += recordValue; 
        } 
       } 
      } 
      Console.WriteLine(sum); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

这不是我的解决方案 – iub3rskillz

+0

你想从那个csv文件中得到什么? – Anbazhagan

+0

它没有得到逗号(,)后面的最后两条记录。例如:487207,1484,15047920。从这些仅将487207添加到列表中。但我还需要将1484和15047920添加到列表中。 getRecords不能正确执行。 – iub3rskillz

0

当调用csv.GetRecords<T>() CSVHelper的每行(线),以指定的类型的整体映射。您正在映射到int类型。您的每行CSV中有3个值。这3个值不能映射到单个int。 CSVHelper只是映射每行中的第一条记录。

如果您想使用CsvReader,您应该定义一个自定义类(具有3个int属性)并使用csv.GetRecords<MyCustomCsvClass>()。您可能还需要/需要创建一个自定义CsvClassMap。 CSVHelper文档非常好:Mapping By Index

或者,您可以使用CsvParser class,它不进行映射或类型转换。它只是为每行返回一个string[]