開発者ブログ
TOP開発者ブログCSVの読み書き

CSVの読み書き

コーディング

受託開発担当のIです。

開発をしているとCSVを扱うことがたまにあります。そういった時、自分で実装するのも良いのですが今回はCsvHelperというライブラリを使ってみたので簡単に紹介します。

開発環境

開発環境、言語は以下の通りです。

Visual Studio 2015 RC
.Net Framework 4.5.2
Visual C#

導入方法

Visual Studio 2015 RCでの導入方法を説明します。

メニュー→ツール→NuGetパッケージマネージャ→ソリューションのNuGetパッケージの管理…
を選択し、「NuGet Package Manager」を開いてください。

NuGetPackageManager

右上の検索ボックスに「CsvHelper」と入力して検索、見つかったら右の「Install」ボタンを押下してプロジェクトに追加してください。
インストールが完了するとプロジェクトの参照一覧に「CsvHelper」が追加されます。

読み込み

CSVファイルの読み込み方法を説明します。

次のCSVファイルを読み込んでみます。

test.csv

1
2
3
111,Sato,Sato@testhos.co.jp
112,Wada,Wada@testhos.co.jp
113,Yoshida,Yoshida@testhos.co.jp

まずはマッピングを定義します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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でマッピングを登録。
そして定義したマッピングを使用して読み込み。

1
2
3
4
5
6
7
8
9
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に表示。

csvdatagrid

このようにCsvHelperを使えば簡単にCSVファイルを読み込むことが出来ます。

書き込み

CSVファイルの書き込み方法を説明します。

先ほど読み込んだデータを追加、変更します。

csvdatagrid3

書き込むCSVにもヘッダーは必要ないのでConfiguration.HasHeaderRecordはfalse、Configuration.RegisterClassMapでマッピングを登録。
データを変更したDataGridにバインドしてあるソースをCSVファイルに書き込み。

1
2
3
4
5
6
7
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

1
2
3
4
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で設定できるようです。いろいろ試してみてください。

帳票ツールに関するお悩みを
トータルでサポートいたします