C# 获取CSV文件的单个元素
我试图将一些csv元素添加到Alimento列表中,其中Alimento声明为:C# 获取CSV文件的单个元素,c#,string,list,csv,split,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;
namespace ContaCarboidrati
{
class Alimento
{
public virtual string Codice { get; set; }
public virtual string Descrizione { get; set; }
public virtual int Carboidrati { get; set; }
}
}
我的csv如下所示:
var item = abc.Split(',');
listaCsv.Add(new Alimento() { Codice = item[0], Descrizione = item[1],
Carboidrati = int.Parse(item[2])};
“C00,意大利面,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(",");
}
私有静态列表CreaListaAlimentiDaCsv()
{
List listaCsv=新列表();
StreamReader sr=新的StreamReader(@“C:\Users\Alex\Documents\RecordAlimenti.csv”);
字符串abc=sr.ReadLine();
//listaCsv=abc.Split(“,”);
}
abc是“C00,意大利面,75”。我想得到一个元素将其添加到列表中,或者将所有3个元素添加到列表中,我认为单个元素更容易创建
对不起,我英语不好
提前谢谢
Alex你的思路是正确的,但是你不能仅仅创建一个包含三个字符串的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更高级的内容,请尝试以下方法之一:
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();
假设您的数据不坏,您可以很容易地解析它
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])
});
}
使用Split方法的注释代码有什么问题?Split返回一个数组,因此listaCsv[],但在其他情况下,它看起来很好。然后循环遍历数组,并将每个项目分配给Codice、Descriptione和Carboidrati。或者我误解了?为了使用CSV,最好使用一些库,例如.CSV记录可以跨多行(在引用的字段中可以有换行符),逐行阅读对您没有帮助。+1对于提供适合其现有代码的简单解决方案,它给出了一个错误con“var item=abc.Split(,”);参数1:无法从中强制转换“string”改为“Char[]”@user1711154抱歉,更改了代码,它应该是abc.Split(“,”);即使用单引号。单引号将创建一个字符,这就是我们在这里想要的。双引号=字符串。逗号不是必需的,我可以取消它们。它工作得很好。非常感谢!这是最简单的方法,所以我将其标记为答案