CSVの読み書き
受託開発担当のIです。
開発をしているとCSVを扱うことがたまにあります。そういった時、自分で実装するのも良いのですが今回はCsvHelperというライブラリを使ってみたので簡単に紹介します。
開発環境
開発環境、言語は以下の通りです。
Visual Studio 2015 RC
.Net Framework 4.5.2
Visual C#
導入方法
Visual Studio 2015 RCでの導入方法を説明します。
メニュー→ツール→NuGetパッケージマネージャ→ソリューションのNuGetパッケージの管理...
を選択し、「NuGet Package Manager」を開いてください。
右上の検索ボックスに「CsvHelper」と入力して検索、見つかったら右の「Install」ボタンを押下してプロジェクトに追加してください。
インストールが完了するとプロジェクトの参照一覧に「CsvHelper」が追加されます。
読み込み
CSVファイルの読み込み方法を説明します。
次のCSVファイルを読み込んでみます。
test.csv
111,Sato,Sato@testhos.co.jp 112,Wada,Wada@testhos.co.jp 113,Yoshida,Yoshida@testhos.co.jp
まずはマッピングを定義します。
public class Customer { public long Id { get; set; } public string Name { get; set; } public string Email { get; set; } } public class CustomerMap : CsvClassMap<Customer> { public CustomerMap() { Map(m => m.Id).Index(0); Map(m => m.Name).Index(1); Map(m => m.Email).Index(2); } }
ヘッダー行はないのでConfiguration.HasHeaderRecordはfalse、Configuration.RegisterClassMapでマッピングを登録。
そして定義したマッピングを使用して読み込み。
MainWindowViewModel model = (MainWindowViewModel)this.DataContext; using (CsvParser parser = new CsvParser(new StreamReader(@"c:\test\test.csv", Encoding.GetEncoding("Shift_JIS")))) { parser.Configuration.HasHeaderRecord = false; parser.Configuration.RegisterClassMap<CustomerMap>(); CsvReader reader = new CsvReader(parser); List<Customer> customerList = reader.GetRecords<Customer>().OrderBy(x => x.Id).ToList(); model.CustomerList = new ObservableCollection<Customer>(customerList); }
読み込んだCSVデータをDataGridに表示。
このようにCsvHelperを使えば簡単にCSVファイルを読み込むことが出来ます。
書き込み
CSVファイルの書き込み方法を説明します。
先ほど読み込んだデータを追加、変更します。
書き込むCSVにもヘッダーは必要ないのでConfiguration.HasHeaderRecordはfalse、Configuration.RegisterClassMapでマッピングを登録。
データを変更したDataGridにバインドしてあるソースをCSVファイルに書き込み。
MainWindowViewModel model = (MainWindowViewModel)this.DataContext; using (var writer = new CsvWriter(new StreamWriter(@"c:\test\test2.csv", false, Encoding.GetEncoding("Shift_JIS")))) { writer.Configuration.HasHeaderRecord = false; writer.Configuration.RegisterClassMap<CustomerMap>(); writer.WriteRecords(model.CustomerList); }
CSV出力結果は以下の通り。
test2.csv
111,Sato,Sato@testhos.co.jp 112,Kamiya,Kamiya@testhos.co.jp 113,Yoshida,Yoshida@testhos.co.jp 118,Sakata,Sakata@testhos.co.jp
書き込みも読み込みと同様に簡単に出来ました。
まとめ
TextFieldParserや、ODBC data providerなど色々試してみましたが、今回使用したCsvHelperは結構使いやすいと思いました。今回使用したヘッダーの設定以外の細かい設定もCsvWriter、CsvParserのConfigurationで設定できるようです。いろいろ試してみてください。