C#
CSVHelper
新人プログラマ応援
More than 1 year has passed since last update.

C#でcsvファイルを扱うモジュールであるCsvHelperを使って読み込んでみた。

このような形のcsvファイルを読み込んで、表示とListにする処理。

リュウ,1964-07-21,Male
ケン,1965-02-14,Male
ガイル,1960-12-23,Male
春麗,1968-03-01,Female
サガット,1955-07-02,Male
ダルシム,1952-11-22,Male
ザンギエフ,1956-06-01,Male
豪鬼,,Male

まず、カラムの定義。

public enum Gender{Male,Female,Unknown}
public class Columns
{
    public string Name{ get; set;}
    public Nullable<DateTime> Date{ get; set;}
    public Gender gender{ get; set;}
}

このcsvは名前と日付と性別なので、以下のクラスを定義する。

次にマッピング

public sealed class AccountMap : CsvHelper.Configuration.CsvClassMap<Columns>
{
    public AccountMap()
    {
        Map (x => x.Name).Index (0);
        Map (x => x.Date).Index (1);
        Map (x => x.gender).Index (2);
    }
}

これで、csvをインデックスごとに分割できる

実際の処理はこんな感じ

using (var csv = new CsvHelper.CsvReader(new StreamReader (filename)))
{
    csv.Configuration.HasHeaderRecord = false; // Headerはなし
    csv.Configuration.RegisterClassMap<AccountMap> ();
    var records = csv.GetRecords<Columns> ();
    foreach (var item in records)
    {
        Console.WriteLine ("{0},{1},{2}",item.Name,item.Date,item.gender);
    }
}

これで、行ごとの要素を出力できる。

Listに持たせる場合はこんな感じ

using (var parse = new CsvHelper.CsvParser (new StreamReader (filename))) 
{
    parse.Configuration.HasHeaderRecord = false;
    parse.Configuration.RegisterClassMap<AccountMap> ();
    var reader = new CsvHelper.CsvReader (parse);
    List<Columns> data = reader.GetRecords<Columns>().ToList ();
}

これでdataはリストが生成されているはず