1
        ABCDE
血液 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.1 0 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 个值?

4

2 回答 2

2

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

如果您的类属性名称与 CSV 列名称匹配,则无需任何规范即可工作。

于 2013-05-28T00:27:15.683 回答
1

我会通过使用类似这样的 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);
   }
}
于 2013-05-28T02:24:29.443 回答