C# - 按CSV文件上的列拆分

时间:2017-06-29 11:31:09

标签: c# csv

我想从csv文件中导入一些数据,但是我遇到了一个我无法弄清楚的小问题。

给我这个文件的人,在单元格中添加了逗号分隔值,所以当我拆分它们时,它们将被添加到列表中。相反,我想将每列的所有值都作为一个字符串,我只是无法弄清楚如何。

例如,我所说的专栏是关于餐厅开放的日子。这可以是Mo, Tu, We, Su,但也可以是Mo, Tu

有没有办法可以遍历每列的de值,而不是逗号分隔值?

我目前正在使用它,但这只会将每一天添加到总值列表中:

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(',');
        }
    }
}

2 个答案:

答案 0 :(得分:3)

使用const findRecuring = (array) => [... [].concat(...array.map((o) => Object.values(o)[0])) // combine to one array .reduce((m, v) => m.set(v, (m.get(v) || 0) + 1), new Map()) // count the appearance of all values in a map ] // convert the map to array of key/value pairs .filter(([, v]) => v === array.length) // filter those that don't appear enough times .map(([k]) => k); // extract just the keys /** Test cases **/ console.log('Several:', findRecuring([ {"key1":[6,1,2,3,8]}, {"key2":[2,6,3,4,8]}, {"key3":[2,5,6,8]}, ]).join()); console.log('None: ', findRecuring([ {"key1":[9,0,11]}, {"key2":[2,6,3,4,8]}, {"key3":[2,5,6,8]}, ]).join());解析CSV文件:

TextFieldParser

TextFieldParser parser = new TextFieldParser(new StringReader(lineContent)); parser.SetDelimiters(","); string[] rawFields = parser.ReadFields(); lineContent,其中包含文件中当前行的内容。

string在命名空间中可用:

TextFieldParser

不介意删除Visual Basic部分它在C#

中工作正常

修改

在您的代码中,您可以像这样实现它:

Microsoft.VisualBasic.FileIO

答案 1 :(得分: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