2013-02-24 62 views
0

是否可以從CSV文件創建我自己的類的列表?如何將CSV文件讀取到列表<myClass>?

該文件例如看起來像:

ID;NAME 
1;Foo 
2;Bar 

然後我有這樣一個類:

class MyClass 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
} 

是有可能產生這個類的一個列表出來的CVS的文件?也許有一些庫

+1

http://stackoverflow.com/questions/5541503/parsing-a-csv-file-with-c-ignoring-thousand-separators/5541553#5541553 – kenny 2013-02-24 16:07:56

回答

4

您可以使用CSV解析器,如FileHelpersFastCSV。如果你不希望使用第三方庫你可能看看內置TextFieldParser類可以這樣使用:

public IEnumerable<MyClass> Parse(string path) 
{ 
    using (TextFieldParser parser = new TextFieldParser(path)) 
    { 
     parser.CommentTokens = new string[] { "#" }; 
     parser.SetDelimiters(new string[] { ";" }); 
     parser.HasFieldsEnclosedInQuotes = true; 

     // Skip over header line. 
     parser.ReadLine(); 

     while (!parser.EndOfData) 
     { 
      string[] fields = parser.ReadFields(); 
      yield return new MyClass() 
      { 
       id = fields[0], 
       name = fields[1] 
      }; 
     } 
    } 
} 

然後:

List<MyClass> list = Parse("data.csv").ToList(); 

從未,請never roll your own CSV parser其他人建議你在這裏作爲你的問題的答案。

+0

永不言敗。如果你知道你的文件結構,也許寫一些小東西並不是最壞的東西。 – gsharp 2013-02-24 16:13:19

+0

你知道文件結構。這是CSV :-)'也許寫點小東西並不是最壞的東西。「從這裏引用(http://secretgeek.net/csv_trouble.asp):'現在是八個星期以來,你說:「我知道!我只會使用String.Split(...」'。 – 2013-02-24 16:14:58

+0

哈哈好吧:)我我也是FileHelpers的粉絲。然而,在FileHelpers在這裏我分裂和分析我自己和那些東西仍在運行;-) – gsharp 2013-02-24 16:23:13