CsvHelperを使用して、CSVファイルを読み書きします。

CsvHelper のインストール

Visual Studio 2019のNuGet パッケージ マネージャーを使用してCsvHelper をインストールします。

Visual Studio の「ツール」 -> 「NuGet パッケージ マネージャー」 -> 「ソリューションの NuGet パッケージの管理」を選択します。

「参照」タブを選択して、検索欄に「CsvHelper」と入力して表示された「CsvHelper」を選択し、チェックボックスにチェックを入れて、「インストール」ボタンをクリックします。

CsvHelperのバージョン「27.2.1」 がインストールされました。

CSV読み書きソフトの作成

クラスマップを使ったCSV読み書きソフト「CsvHelperTest」を作成します。

  • 16-33行目でCSVファイル「account.csv」を読み込み、コンソールにその内容を表示します。
  • 37-54行目で、作成したデータをCSVファイル「sample.csv」に書き込みます。

CsvHelperTest

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
using CsvHelper;
using CsvHelper.Configuration;
using CsvHelper.Configuration.Attributes;

namespace CsvHelperTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var reader = new StreamReader("account.csv"))
            {
                using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
                {
                    //クラスマップを使って読み込み順序を指定します
                    csv.Context.RegisterClassMap<AccountMapper>();

                    // csv データが行毎に Foo クラスに格納され、IEnumerable<Foo> として
                    // records に割り当てられます。
                    var records = csv.GetRecords<Account>();

                    // records は IEnumerable なので、こんな使い方ができます。
                    foreach (var data in records)
                    {
                        Console.WriteLine("{0} : {1} : {2} : {3}", data.Name, data.Telephone1, data.Address1_city, data.Primarycontactid);
                    }
                }
            }
            Console.ReadKey();


            List<Hoge> list = new List<Hoge>();
            list.Add(new Hoge { Id = 1, Name = "John" });
            list.Add(new Hoge { Id = 2, Name = "Paul" });
            list.Add(new Hoge { Id = 3, Name = "George" });
            list.Add(new Hoge { Id = 4, Name = "Ringo" });

            var config = new CsvConfiguration(System.Globalization.CultureInfo.InvariantCulture);
            config.HasHeaderRecord = true;
            config.ShouldQuote = (context) => true;

            using (StreamWriter sw = new StreamWriter(@"sample.csv", false, Encoding.GetEncoding("Shift_JIS")))
            {
                using (var writer = new CsvWriter(sw, config))
                {
                    writer.Context.RegisterClassMap<HogeMapper>();
                    writer.WriteRecords(list);
                }
            }
        }
    }

    class Hoge
    {
        [Name("ユーザーID")]
        public int Id { get; set; }

        [Name("名前")]
        public string Name { get; set; }

        [Name("バージョン表記")]
        [Constant("foo")]
        public string Version { get; set; }

        [Ignore]
        public string Ignored { get; set; }
    }

    class HogeMapper : CsvHelper.Configuration.ClassMap<Hoge>
    {
        public HogeMapper()
        {
            AutoMap(CultureInfo.InvariantCulture);
        }
    }

    /// <summary>
    /// 格納用クラス
    /// </summary>
    public class Account
    {
        [Index(0)]
        public string Name { get; set; }
        [Index(1)]
        public string Telephone1 { get; set; }
        [Index(2)]
        public string Address1_city { get; set; }
        [Index(3)]
        public string Primarycontactid { get; set; }
        [Index(4)]
        public string Numberofemloyees { get; set; }
    }

    /// <summary>
    /// マッピング用クラス
    /// </summary>
    class AccountMapper : CsvHelper.Configuration.ClassMap<Account>
    {
        public AccountMapper()
        {
            Map(x => x.Name).Index(0);
            Map(x => x.Telephone1).Index(1);
            Map(x => x.Address1_city).Index(2);
            Map(x => x.Primarycontactid).Index(3);
            Map(x => x.Numberofemloyees).Index(4);
        }
    }
}

CSV読み書きソフトの実行

次の「account.csv」ファイルを実行ディレクトリに置き、CSV読み書きソフト「CsvHelperTest」を実行します。

account.csv

name,telephone1,address1_city,primarycontactid,numberofemployees
Account1,80323287,Tokyo,test contact,10
Account2,3487984728,Osaka,test contact,12
Account3,34923487,Nagoya,test contact,332
,,,,21

次の画面がコンソールに表示されます。

任意のキーを押すと、次の「sample.csv」ファイルが実行ディレクトリに作成されます。

sample.csv

"ユーザーID","名前","バージョン表記"
"1","John","foo"
"2","Paul","foo"
"3","George","foo"
"4","Ringo","foo"