我想从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(',');
}
}
}
答案 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