2017-06-29 57 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