2017-01-22 98 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[]