Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取CSV文件的单个元素_C#_String_List_Csv_Split - Fatal编程技术网

C# 获取CSV文件的单个元素

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;

我试图将一些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如下所示:

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更高级的内容,请尝试以下方法之一:


您可以使用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();

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

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(“,”);即使用单引号。单引号将创建一个字符,这就是我们在这里想要的。双引号=字符串。逗号不是必需的,我可以取消它们。它工作得很好。非常感谢!这是最简单的方法,所以我将其标记为答案