-1

我正在尝试将一些 csv 元素添加到 Alimento 列表中,其中 Alimento 被声明为:

namespace ContaCarboidrati
{
    class Alimento
    {
       public virtual string Codice { get; set; }
       public virtual string Descrizione { get; set; }
       public virtual int Carboidrati { get; set; }
    }
}

我的 csv 看起来像这样:

"C00, Pasta, 75".

这是应该从 csv 创建列表的方法:

private static List<Alimento> CreaListaAlimentiDaCsv()
{        
   List<Alimento> listaCsv = new List<Alimento>();
   StreamReader sr = new StreamReader(@"C:\Users\Alex\Documents\RecordAlimenti.csv");
   string abc = sr.ReadLine();
   //listaCsv = abc.Split(",");
}

abc 是“C00,意大利面,75”。我想获取一个元素以将其添加到列表中,或者将所有 3 个元素添加到列表中,我认为单个元素更容易制作。

对不起,我的英语不好

提前致谢

亚历克斯

4

3 回答 3

4

你走在正确的轨道上,但你不能只创建一个包含三个字符串的 Alimento,如果你执行 abc.Split(",") 就会得到这样的结果。您需要为 csv 文件中的每个项目(行)创建一个新的 Alimento 对象,并正确初始化每个对象。像这样的东西:

var item = abc.Split(',');
listaCsv.Add(new Alimento() { Codice = item[0], Descrizione = item[1], 
Carboidrati = int.Parse(item[2])};

此外,您的 csv 似乎包含您可能想要删除的逗号后的空格。您可以使用 string.Trim() 摆脱前导/尾随空格。您还必须确保第三项实际上是一个整数,如果不是这种情况,则采取措施(即添加一些错误处理)。

附带说明一下,实现一个 csv 阅读器并不像人们想象的那么简单,但是那里有几个免费的 C# 实现。如果您需要比仅仅阅读一个简单的(并且严格地每项一行)csv 更高级的东西,请尝试以下方法之一:

于 2013-03-06T21:46:22.760 回答
1

您可以使用 LINQ 解析文件

var listaCsv = (from line in File.ReadAllLines("RecordAlimenti.csv")
                let items = line.Split(',')
                select new Alimento {
                      Codice = items[0],
                      Descrizione = items[1],
                      Carboidrati = Int32.Parse(items[2])
                }).ToList();
于 2013-03-06T21:46:41.077 回答
0

假设您的数据还不错,您可以很容易地解析它。

private IEnumerable<Alimento> CreaListaAlimentiDaCsv(string fileName)
{        
    return File.Readlines(fileName) //@"C:\Users\Alex\Documents\RecordAlimenti.csv"
               .Select(line => line.Split(',').Trim())
               .Select(
                    values =>
                        new Alimento
                            {
                                Codice = value[0],
                                Descrizione  = values[0],
                                Carboidrati = Convert.ToInt32(values[3])
                            });
}

您也可以在方法上使用 Linq,例如

//Takes one line without iterating the entire file
CreaListaAlimentiDaCsv(@"C:\Users\Alex\Documents\RecordAlimenti.csv").Take(1); 

//Skips the first line and takes the second line reading two lines total
CreaListaAlimentiDaCsv(@"C:\Users\Alex\Documents\RecordAlimenti.csv").Skip(1).Take(1);
于 2013-03-06T21:51:57.240 回答