2017-06-29 73 views
1

我想從csv文件導入一些數據,但是我遇到了一個我無法弄清楚的小問題。C# - 按CSV文件列拆分

給了我這個文件的人,在單元格中添加了逗號分隔值,所以當我拆分它們時,它們將被添加到列表中。相反,我想將每列的所有值都作爲一個字符串來使用,但我無法真正弄清楚。

例如,我在談論的專欄是關於餐廳開放的日子。這可以是Mo, Tu, We, Su,但它也可以是Mo, Tu

有沒有一種方法可以循環每列的值,而不是用逗號分隔的值?

我目前使用的是這樣的,但是這只是每天增加值的總清單:

using (var fs = File.OpenRead(csvUrl)) 
using (var reader = new StreamReader(fs, Encoding.UTF8)) 
{ 
    while (!reader.EndOfStream) 
    { 
     var line = reader.ReadLine(); 
     if (i > 0) 
     { 
      var values = line.Split(','); 
     } 
    } 
} 
+0

[讀取CSV文件和存儲的值到一個數組]的可能的複製(https://stackoverflow.com/questions/5282999/reading-csv -file-and-stored-values-into-an-an-array) –

+0

用逗號隔開whcih會產生一個數組或列表,你可以循環使用 –

+0

@RajshekarReddy就像我說的那樣,它將每個單獨的一天添加爲一個單獨的值陣列。我想將每個列的值組合在一起。 – RandomStranger

回答

3

使用TextFieldParser解析CSV文件:

TextFieldParser parser = new TextFieldParser(new StringReader(lineContent)); 
parser.SetDelimiters(","); 
string[] rawFields = parser.ReadFields(); 

lineContentstring與文件中當前行的內容。

TextFieldParser可在命名空間:

Microsoft.VisualBasic.FileIO 

不介意abaout它工作在C#罰款的Visual Basic部分

編輯

在你的代碼可以實現它像這樣:

using (var fs = File.OpenRead(csvUrl)) 
using (var reader = new StreamReader(fs, Encoding.UTF8)) 
{ 
    while (!reader.EndOfStream) 
    { 
     var line = reader.ReadLine(); 
     if (i > 0) 
     { 
      TextFieldParser parser = new TextFieldParser(new StringReader(lineContent)); 
      parser.SetDelimiters(","); 
      string[] rawFields = parser.ReadFields(); 
     } 
    } 
} 
+0

這就是我正在尋找的,謝謝!我會接受它,只要SO讓我 – RandomStranger

+0

@RandomStranger不用客氣 –

2

最好的解決方案,到目前爲止,處理CSV值是使用內置的庫.NET: 它在我的StackOverflow的答案在這裏解釋這裏: Reading CSV file and storing values into an array

爲了便於參考,我包括代碼在這裏爲好。

using Microsoft.VisualBasic.FileIO; 

var path = @"C:\Person.csv"; // Habeeb, "Dubai Media City, Dubai" 
using (TextFieldParser csvParser = new TextFieldParser(path)) 
{ 
csvParser.CommentTokens = new string[] { "#" }; 
csvParser.SetDelimiters(new string[] { "," }); 
csvParser.HasFieldsEnclosedInQuotes = true; 

// Skip the row with the column names 
csvParser.ReadLine(); 

while (!csvParser.EndOfData) 
{ 
    // Read current line fields, pointer moves to the next line. 
    string[] fields = csvParser.ReadFields(); 
    string Name = fields[0]; 
    string Address = fields[1]; 
} 
} 

約解析器更多細節在這裏給出:http://codeskaters.blogspot.ae/2015/11/c-easiest-csv-parser-built-in-net.html