自动将值从CSV添加到List<;类>;

本文关键字:List gt lt 添加 CSV | 更新日期: 2023-09-27 18:15:32

A B C D E血液0.02401 0.1104 0 0 1肺0.0016 0.1104 13 0 0.36肠道0.0166 0.015456 19.3 0 0.035胰腺0.0010 0.001104 20.3 0 0.035脾脏0.0006 0.006072 6.8 0 0.22心脏0.0011 0.0054096 9.1 0 0.26肌肉0.1359 0.03069 7 0 0.04脂肪0.03297 0.007728 38.2 0 0.24肾脏0.0024 0.017112 10.5 0 0.16皮肤0.0666 0.0064032 26.9 0 0.02大脑0.0019 0.00276 18.10 0.03骨骼0.0255 0.013248 8.3 0 0.04肝脏0.0128 0.004416 11.3 0.045 0.21

我有一个名为FileReader的方法,它读取文件Parameter.csv(上面的值(并创建一个仅包含数值的名为Variables的列表。我可以让FileReader读取器官名称字符串,并将其放在每个相应值集之前的列表中。

    class Organ
    {
    public string name {get; set;}
    public double A {get; set;}
    public double B {get; set;}
    public double C {get; set;}
    public double D {get; set;}
    public double E {get; set;}
    }
void Main()
{
FileReader Parameters = new FileReader(@"C:'Parameter.csv");
var ListofOrgans = List<Organ>();
Organ Blood = new Organ();
Blood.name = "Blood";
Blood.A = Parameters.Variables[0];
Blood.B = Parameters.Variables[1];
Blood.C = Parameters.Variables[2];
Blood.D = Parameters.Variables[3];
Blood.E = Parameters.Variables[4];
ListofOrgans.Add(Blood);
}

有没有一种方法可以让我自动化,这样我就不必对所有77个值进行硬编码?

自动将值从CSV添加到List<;类>;

CsvHelper库允许您按索引或名称映射到自定义类中,并直接创建类实例的集合。但是,它仍然需要指定文件中的哪些列映射到哪些属性。

如果您的类属性名称与CSV列名匹配,则它将在没有任何规范的情况下工作。

我会使用StreamReader来完成这项工作,类似于这样的东西(我正在内存中键入它,但为时已晚!(:

var ListOfOrgans = new List<Organ>(); 
String tmp = null;
String [] tokens = null;
using(StreamReader sr = new StreamReader(@"C:'Parameter.csv"))
{
   while( !sr.EndOfStream )
   {
      tmp = sr.ReadLine();
      tokens = tmp.Split(' ');
      Organ foo = new Organ();
      foo.name = tokens[0];
      foo.A = Convert.ToDouble(tokens[1]);
      .
      .
      etc.
      ListOfOrgans.Add(foo);
   }
}