【发布时间】:2020-01-02 11:45:09
【问题描述】:
我想读取一个 csv 文件,该文件有 9 列 标题 和下面的许多数据行,但我只对其中的三列感兴趣,而且它们 不连续强>。我已尝试使用此代码,但它不起作用,它在 foreach 循环中停止,并出现来自 CsvHelper 的运行时异常“'名称为'Y'的字段不存在。您可以通过将 MissingFieldFound 设置为 null 来忽略丢失的字段。'” .
csv文件是这样的:
FrameNO , Ttotal, TNo, X, Y , Z , Speed , Intensity, ILog ;
1 , 9 , 1 , 0.08, 1.4 , 0 , 0 , 78 , 19 , ;;
1 , 9 , 2 ,0.1 , 1.56 , 0 , 0 , 228 , 28, ;;
using CsvHelper;
namespace RadarPrototipo.Clases
{
public class Foo
{
public int FrameNO { get; set; }
public double Y { get; set; }
public int Intensity { get; set; }
}
class CCalc
{
public double Calc(int f)
{
double d=1.5;
int inten=0;
using (var reader = new StreamReader("C:/Users/Usuario/Desktop/Uni/AlumnoInterno/grab.csv"))
using (var csv = new CsvReader(reader))
{
csv.Configuration.Delimiter = ",";
var records = csv.GetRecords<Foo>();
csv.Configuration.HeaderValidated = null;
foreach (var Foo in records)
{
if (Foo.FrameNO == f)
{
if (Foo.Y < 1.8 && Foo.Y > 1.5)
{
if (Foo.Intensity > inten)
{
inten = Foo.Intensity;
d = Foo.Y;
}
}
}
}
}
return d;
}
}
}
该函数分析这三列的数据并根据条件选择最佳答案,然后返回值Y,即距离。 非常感谢任何帮助。
【问题讨论】:
-
你使用的是什么 CSV 阅读包?
-
你的 csv 看起来怎么样?有列标题吗? Foo 类中的拼写/大小写与您的相同吗?
-
请验证您发布给我们的代码是实际代码,因为您问题中的代码应该可以工作。
Foo,foreach中的变量将包含FrameNO属性就好了。如果您向我们提供了展示问题的完整代码,而不仅仅是一条评论说“如果我编写更多代码,问题可能就在这里”,那就更好了。请发布完整的minimal reproducible example。 -
另外,您能否告诉我们问题是编译器给您一个
FrameNO不存在的错误,或者如果您得到一个来自 CsvHelper 的运行时异常,指出 csv 文件中不存在列FrameNO。 csv 文件是否包含标题?如果是,它是否包含名为 FrameNO 的列/字段?