【发布时间】:2018-05-29 10:58:19
【问题描述】:
我正在读取一个 CSV 文件,并且基本上是在尝试使用标题来确定文件中值的序数位置,尽管最后一部分给我带来了一些麻烦。以下是我目前所拥有的:
private static IEnumerable<Cow> ReadCowStream(Stream source)
{
bool isHeader = true;
var cows = new List<Cow>();
using (var reader = new StreamReader(source))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (line != null)
{
var values = line.Split(',');
if (isHeader && values.Contains("Weight") && values.Contains("Age"))
{
isHeader = false;
}
else
{
cows.Add(new Cow(
weight: values[0],
age: values[1]));
}
}
}
}
return animals;
}
CSV 示例:
Weight,Age
300,10
319,11
100,1
370,9
在这种情况下,输出将是List<Cow>,其中第一个条目的值显然是“Weight”:“300”和“Age”:“10”,但是如果“Weight”和“Age”颠倒了怎么办?然后我会给错误的变量分配错误的值。
基本上,我想使用标题来确定是否将values[0] 放入weight 或age 等,因为我认为我不能保证在我正在阅读的CSV 中哪个排在第一位。
【问题讨论】:
-
您可以只检查先出现的内容,即
if(header[0] == 'Weight')[...] else [...],这是我想说的最简单的方法。 -
考虑使用CsvHelper