2013-03-06 50 views
-1

我想一些CSV元素添加到Alimento被聲明爲Alimento,列表:獲取CSV的單個元素文件

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個元素添加到列表中,我認爲單個元素更容易製作。

對不起,我英文不好

在此先感謝

亞歷

+0

的方法,例如,什麼是與你有拆分方法的註釋代碼的問題? Split會返回一個數組,所以listaCsv [],但在其他方面,它似乎很好。然後你會遍歷數組並將每個項目分配給Codice,Descrizione和Carboidrati。或者我誤解了? – Melanie 2013-03-06 21:47:38

+0

要使用CSV,最好使用[FileHelpers](http://filehelpers.sourceforge.net/)等庫。 – publicgk 2013-03-06 21:51:38

+0

CSV記錄可以跨越多行(在引用字段中可以有換行符),逐行閱讀不會對您有所幫助。 – Joey 2013-03-06 21:54:36

回答

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#實現。如果你需要的東西有點不僅僅是閱讀簡單的(嚴格1行的每個項目)CSV更先進,嘗試其中之一:

+0

+1用於提供適合他現有代碼的簡單解決方案 – bas 2013-03-06 21:50:37

+0

它提供了一個錯誤con「var item = abc。拆分(「,」);「 參數1:不可能從」字符串「轉換爲」Char []「 – user1711154 2013-03-06 21:51:07

+0

@ user1711154使用單引號(如他剛剛編輯的) – bas 2013-03-06 21:52:26

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(); 
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);