2017-08-07 70 views
0

我試圖從csv文件中獲取數據到C#中的數組。 問題是,行不像所有其他值一樣用分號隔開。 這意味着只是將它們全部分開,一行的最後一行和下一行的第一個值合併成一個位置。 我怎樣才能以相同的方式拆分它,但在csv文件中解釋我猜的新行(\ n)?c#csv數據到數組

我的想法至今會像

String[] xyz; 
    For Loop to iterate over the data 
     If semicolon, split to the array 
     else if \n(?) split into the array. 

我很新的節目,所以我只是鴕鳥政策知道如何正確地做到這一點,希望你能幫助我。

+0

Hi @danielus。您可以發佈您的代碼和數據樣本,以便我們可以幫助您。 –

+0

閱讀[RFC 4180](https://tools.ietf.org/html/rfc4180)獲取CSV上的整個圖片,然後搜索能夠根據RFC 4180 –

回答

0

解析CSV沒有比Lumenworks框架更好的選擇。它不僅易於使用,而且重量輕,性能世界一流。您可以從的NuGet https://www.nuget.org/packages/LumenWorksCsvReader/

獲得庫和解析像

using (CsvReader csv = new CsvReader(new StreamReader(fileStream, Encoding.Default), true)) 
    { 
    foreach (var record in csv) 
    { 
      //PARSE ROWS ONE BY ONE AND GET COLUMN VALUE BY INDEX 
    } 
    } 
+0

處理CSV數據的庫。這聽起來像是一個很好的解決方案。雖然如果我嘗試在Visual Studio的Nuget包管理器中安裝LumenWorks CSV Reader軟件包,它會給我一個錯誤並回滾安裝。不知道如何解決這個問題... –

+0

http://api.256file.com/lumenworks.framework.io.dll/en-download-5182.html你可以從這裏下載 –

+0

這似乎是框架問題,你可能會發現下面的鏈接有用,因爲它有不同版本的工作項目和DLL https://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader –

0

您的CSV如果文件不是太大,你可以調用File.ReadAllLines()第一個拿到的文本行的陣列。然後,您可以拆分該數組中的行。可以使用。

using (StreamReader sr = File.OpenText("MyFile.txt")) 
{ 
    string line; 
    string[] splitted; 

    while ((line = sr.ReadLine()) != null) 
    { 
    splitted = line.Split(';'); 
    ... 
    } 
} 
0

您可以使用開源庫來加載csv文件。它們中有多個FileHelpers,CSVReader和Cinchoo ETL。

Cinchoo ETL有CSVReader。一個簡單,快速和基於流的CSV解析器。

foreach (dynamic rec in new ChoCSVReader("test.csv").WithFirstLineHeader()) 
{ 
    Console.WriteLine(rec.COMPANY_NAME); 
    Console.WriteLine(rec.COMPANY_TYPE); 
}