CSVを読み込むのにMicrosoft.VisualBasicを参照するのってなんかな…という人向けに。
CsvHelperというライブラリを見つけました。サイトはこちら。
クラスにマップしてくれる(フィールド番号等を指定してとる方法もある)ので刺身タンポポなクラスへのマッピング作業が不要になります。
使い方はデータを入れるクラスを作って、マッピングルールを作る(なくても大丈夫)
// CSVのデータを格納するクラス class Record { public string Column1 { get; set; } public string Column2 { get; set; } public string Column3 { get; set; } } // 格納するルール class CsvMapper : CsvHelper.Configuration.CsvClassMap<Record> { public CsvMapper() { Map(x => x.Column1).Index(0); Map(x => x.Column2).Index(1); Map(x => x.Column3).Index(2); } }
あとは、こんな感じで使えばOKです。
using(var r = new StreamReader("sample.csv", Encoding.GetEncoding("SHIFT_JIS"))) using(var csv = new CsvHelper.CsvReader(r)) { // ヘッダーはないCSV csv.Configuration.HasHeaderRecord = false; // 先ほど作ったマッピングルールを登録 csv.Configuration.RegisterClassMap<CsvMapper>(); // データを読み出し var records = csv.GetRecords<Record>(); // 出力 foreach (var record in records) { Console.WriteLine("{0}/{1}/{2}", record.Column1, record.Column2, record.Column3); } }
出力結果などは以下の記事と同じです。