我正在尝试将一些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个元素添加到列表中,我认为单个元素更容易制作。
抱歉我的英文不好
提前致谢
亚历
答案 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);