C#

【C#】CsvHelper の使い方

利用準備

パッケージのインストール

PM> Install-Package CsvHelper

https://joshclose.github.io/CsvHelper/getting-started/

CSVファイルの作成

下記のような中身のCSVファイルを例にします

Id,Name,Age
1,永野芽衣,21
2,本田翼,28
3,戸田恵梨香,32

データ格納用クラスの作成

Index 属性を定義することで、CSVファイルの何列目かを指定できます。
また、Name 属性にCSVヘッダ名を定義することで、CSVのヘッダ名とプロパティ名を一致させる必要が無くなります。

今回はIndex 属性を使用します。

public class Person
{
    [Index(0)]
    public int Id { get; set; }
    [Index(1)]
    public string Name { get; set; }
    [Index(2)]
    public int Age { get; set; }
}

使い方

https://joshclose.github.io/CsvHelper/

.NET 6 でshift-jisエンコードをする場合は追加で1行各必要があります(2022/08/20 追記)

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

CSVを読み取る

var filePath = @"C:\test\person_read.csv";

// .NET 6 の場合でShift-jisをエンコードする場合は下記の処理が必要
// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

using (var reader = new StreamReader(filePath, Encoding.GetEncoding("Shift_JIS"))) //Shift-JISの文字化け対策にエンコード
{
    using (var csv = new CsvReader(reader, new CultureInfo("ja-JP", false))
    {
        //IEnumerable<Person>で返す
        var records = csv.GetRecords<Person>();
    }
}

CSVにヘッダがない場合は下記のようにコードで明示する必要があります。

var filePath = @"C:\test\person_read.csv";

// .NET 6 の場合でShift-jisをエンコードする場合は下記の処理が必要
// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

using (var reader = new StreamReader(filePath, Encoding.GetEncoding("Shift_JIS"))) //Shift-JISの文字化け対策にエンコード
{
    var config = new CsvHelper.Configuration.CsvConfiguration(new CultureInfo("ja-JP", false))
    {
        //ヘッダ無(デフォルトtrue)
        HasHeaderRecord = false,
    };
    using (var csv = new CsvReader(reader, config))
    {
        var records = csv.GetRecords<Person>();
    }
}

CSVに書き出す

パスが存在しなくてもCSVファイルは生成されます。
逆にファイルが存在する場合は、上書きされます。

var filePath = @"C:\test\person_write.csv";

// .NET 6 の場合でShift-jisをエンコードする場合は下記の処理が必要
// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

using (var writer = new StreamWriter(filePath, false, Encoding.GetEncoding("Shift_JIS"))) //Shift-JISの文字化け対策にエンコード
{
    using (var csv = new CsvWriter(writer, new CultureInfo("ja-JP", false))
    {
        var people = new List<Person>()
        {
            new Person(){Id=4,Name="川口春奈",Age=26 },
            new Person(){Id=5,Name="新垣結衣",Age=33 },
            new Person(){Id=6,Name="吉岡里帆",Age=28 },
        };
        csv.WriteRecords(people);
    }
}
var filePath = @"C:\test\person_write.csv";

// .NET 6 の場合でShift-jisをエンコードする場合は下記の処理が必要
// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

using (var writer = new StreamWriter(filePath, false, Encoding.GetEncoding("Shift_JIS"))) //Shift-JISの文字化け対策にエンコード
{
  var config = new CsvHelper.Configuration.CsvConfiguration(new CultureInfo("ja-JP", false))
   {
        //ヘッダ無(デフォルトtrue)
        HasHeaderRecord = false,
    };
    using (var csv = new CsvWriter(writer, config)
    {
        var people = new List<Person>()
        {
            new Person(){Id=4,Name="川口春奈",Age=26 },
            new Person(){Id=5,Name="新垣結衣",Age=33 },
            new Person(){Id=6,Name="吉岡里帆",Age=28 },
        };
        csv.WriteRecords(people);
    }
}
エンジニアの転職ならこれ!

【第二新卒向け】マイナビジョブ20's

マイナビジョブ20'sは、20代・第二新卒・既卒向けの転職エージェントです。

▼こんな方におすすめ
・はじめて転職しようと思っている
・転職できるだけのスキルが自分にあるか不安
・手厚いサポートを受けたい

【経験者向け】レバテックキャリア

ITエンジニア専門の転職エージェントです。

元エンジニアなど高い専門性を持つアドバイザーが理想の求人を提案してくれます。

▼こんな方におすすめ
・20代後半~40代前半
・年収を上げたい
・スキルアップしたい
・手厚いサポートを受けたい

POSTED COMMENT

  1. […] CsvHelper というライブラリを使用することで手軽にCSVファイルの読み書きを行うことが可能です。使い方はこちらの記事を参照して下さい。 […]

  2. […] 【C#】CsvHelper の使い方 利用準備 パッケージのインストール PM> Install-Pack… […]

  3. […] 【C#】CsvHelper の使い方 利用準備 パッケージのインストール PM> Install-Pack… […]

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です