获取CSV文件的单个元素

时间:2013-03-06 21:39:55

标签: c# string list csv split

我正在尝试将一些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,Pasta,75”。我想获得一个元素将其添加到列表中,或者将所有3个元素添加到列表中,我认为单个元素更容易制作。

抱歉我的英文不好

提前致谢

亚历

3 个答案:

答案 0 :(得分:3)

你是在正确的轨道上,但你不能只创建一个三个字符串的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更先进,请尝试以下方法之一:

答案 1 :(得分: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();

答案 2 :(得分: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);