2016-08-04 108 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]); 

當然,如果該行是空的這可能會失敗,所以你需要檢查的是,太。