C# 使用 CSV 标头为不同的变量赋值

我正在阅读一个 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。


MYYA
浏览 132回答 3
3回答

繁星淼淼

您可以存储标题索引,例如:int weightIndex = Array.FindIndex(values, v => v == "Weight");int ageIndex = Array.FindIndex(values, v => v == "Age");然后按如下方式访问值:cows.Add(new Cow(&nbsp; &nbsp; weight: values[weightIndex],&nbsp; &nbsp; age: values[ageIndex]));
打开App,查看更多内容
随时随地看视频慕课网APP