C#读取CSV,我只想读取一些字段

CSV reading in C#, I just want to read some fields

我想读取一个 csv 文件,它有 9 列 headers 和下面的许多数据行,但我只对其中的三列感兴趣,并且它们 不连续 。我已经尝试使用此代码,但它不起作用,它在 foreach 循环中停止,并出现来自 CsvHelper 的运行时异常“'名称为 'Y' 的字段不存在。您可以通过将 MissingFieldFound 设置为 null 来忽略丢失的字段。 '".

csv文件是这样的:

FrameNO,Ttotal,TNo,X,Y,Z,速度,强度 , 日志;
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;
        }
    }
}

该函数分析这三列的数据并根据条件选择最佳答案,然后 returns 值 Y,即距离。 非常感谢任何帮助。

以下适合我。

public class Program
{
    public static void Main(string[] args)
    {

        using (MemoryStream stream = new MemoryStream())
        using (StreamWriter writer = new StreamWriter(stream))
        using (StreamReader reader = new StreamReader(stream))
        using (CsvReader csv = new CsvReader(reader))
        {
            writer.WriteLine("FrameNO,Column2,Y,Column4,Column5,Column6,Intensity,Column8,Column9");
            writer.WriteLine("1,two,1.123,four,five,six,10,eight,nine");
            writer.WriteLine("2,two,2.345,four,five,six,20,eight,nine");
            writer.Flush();
            stream.Position = 0;

            var records = csv.GetRecords<Foo>();
            foreach (var Foo in records)
            {
                Console.WriteLine(Foo.FrameNO);
            }
        }

        Console.ReadLine();
    }
}

public class Foo
{
    public int FrameNO { get; set; }
    public double Y { get; set; }
    public int Intensity { get; set; }
}

您可以尝试的一件事是设置分隔符。您的文化默认值可能不是逗号。此外,如果您的数据和逗号之间有空格,则需要设置 TrimOptions.

using (var csv = new CsvReader(reader))
{
    csv.Configuration.Delimiter = ",";
    csv.Configuration.TrimOptions = TrimOptions.Trim;
    var records = csv.GetRecords<Foo>();