【C#】CSVをCsvWriter、CsvReaderで読み書きする

C#

CsvWriter,CsvReaderとは

正式にはCsvHelperというライブラリに含まれる読み書きするためのクラスで、CSVファイルを簡単に扱うためのOSSライブラリです。

実行環境

記事執筆時は以下の実行環境で確認しています。

.NET 6
Windows11
ConsoleApplication
CsvHelper Version 30.0.1

インストール

NugetPackage(Package Manager Console)
.NET CLI Console

使い方

Attributes

CsvHelperでは値を独自のクラスにマッピングして読み書きします。

作成したクラスに属性を指定する事でカラム名やカラム位置を指定したり、bool型を指定の文字列として出力する事が可能です。

以下に使用頻度の高い属性を記載します。

CsvDataReaderを使用すれば独自クラスを作成しなくても読み書き出来ますが、保守性の為にも独自クラス作成をオススメします。

Csvdatareader | CsvHelper (joshclose.github.io)

属性名設定値説明
Name文字列カラム名を指定します。
Index数値カラムの位置を指定します。(1始まり)
Index,Nameどちらも指定しない場合、読込み時はCSVのカラム順とプロパティ順、型を合わせないとエラーになるっぽいです。
BooleanTrueValues文字列bool型のプロパティがtrueの場合に出力する値を指定します。
BooleanFalseValues文字列bool型のプロパティがfalseの場合に出力する値を指定します。
Constant文字列固定値を指定します。
プロパティの設定値に関係なく固定値が使用されます。
Optional必須ではないカラムに指定します。
出力時:Optional属性を指定したカラムは値がnullの場合は出力されません。
入力時:Optional属性を指定したカラムが存在しない場合対象のカラムは読み込まれません。
Ignore読み書きの対象外とするプロパティを指定します。

読み書きに使用するクラス

CsvConfiguration(設定)

.NET 6 ではデフォルトではshift-jisが使用できません。

使用するためには「Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);」で文字コードを登録する必要があります。

CsvWriter(出力)

「読み書きに使用するクラス」で作成したクラスを出力する例と結果を記載します。

出力結果

CsvReader(入力)

CsvWriterで出力したCSVを取り込む例と結果を記載します。

(IsJapanese列はbool型のため、CSVの内容を日本人→true,外国人→falseに変更しています。)

入力結果

C#プログラミング
凡人プログラマーのブログ

コメント