[C#] CsvHelperでCSVの読み込みを行う方法

[C#] CsvHelperでCSVの読み込みを行う方法

[C#] CsvHelper で CSVの読み込み

[C#] CsvHelperでCSVの書き込み、生成を行う方法

CsvHelperというオープンソースのライブラリを使ったCSVの読み込み方法についてまとめます。CSVの生成方法は上記のURLへどうぞ。

はじめに

公式ドキュメントとインストール方法は以下の通りです。

Document

Document

使い方は上記リンクで確認できます。

Install

まずはNugetからパッケージをインストールします。

Install-Package CsvHelper

使い方

基本

基本はCSVの書き込みと同様、CSVと対応するクラス、それをマッピングする設定クラスを用意してやれば、ライブラリがよろしく読み込んでくれます。まずは簡単な例を以下に記します。

列名とプロパティ名が一致していれば自動でよろしくマッピングしてくれます。GetRecords()メソッドで、CSVの各行データを指定クラスに変換してくれています。

CSV

Name,Kana,BirthDate
太郎,タロウ,1980/01/01
次郎,ジロウ,1990/02/02
三郎,サブロウ,2000/03/03

Personクラス

public class Person
{
    public string Name { get; set; }
    public string Kana { get; set; }
    public DateTime BirthDate { get; set; }
}

読み込み例(自動マッピング)

using (var streamReader = new StreamReader("people-read.csv"))
using (var csv = new CsvReader(streamReader))
{
    var people = csv.GetRecords<Person>();
    foreach (var p in people)
    {
        Console.WriteLine($"Name: {p.Name}, Kana: {p.Kana}, BirthDate: {p.BirthDate}");
    }
}

マッピング

上記の例のように自動マッピングでは実用上では問題があるでしょう。したがって、どの列がどのプロパティにマッピングされるのかを定義するクラスを用意します。

氏名,カナ,生年月日
太郎,タロウ,1980/01/01
次郎,ジロウ,1990/02/02
三郎,サブロウ,2000/03/03
using CsvHelper;
using CsvHelper.Configuration;
using System;
using System.Collections.Generic;
using System.IO;

public class Program
{
    public static void Main(string[] args)
    {
        using (var streamReader = new StreamReader("people-read2.csv"))
        using (var csv = new CsvReader(streamReader))
        {
            csv.Configuration.RegisterClassMap<PersonMapper>();
            var people = csv.GetRecords<Person>();
            foreach (var p in people)
            {
                Console.WriteLine($"Name: {p.Name}, Kana: {p.Kana}, BirthDate: {p.BirthDate}");
            }
        }
    }
    public class Person
    {

        public string Name { get; set; }
        public string Kana { get; set; }
        public DateTime BirthDate { get; set; }
    }
    public class PersonMapper : CsvClassMap<Person>
    {
        public PersonMapper()
        {
            Map(x => x.Name).Name("氏名");
            Map(x => x.Name).Name("カナ");
            Map(x => x.BirthDate).Name("生年月日");
        }
    }
}

PersonMapperクラスがマッピング用の設定クラスです。上記のサンプルコードでは、列名でどのプロパティにマッピングするかを設定しています。

後はいろいろと設定できるようですが、公式ドキュメントを参照すればいろいろとできそうです。

以上。

C#カテゴリの最新記事