PR

C# CSVHelper 項目数の異なるCSVファイルをLISTに読み込む

ネットバンキングのダウンロードしたCSVの明細データを会計データ,販売管理の入金の消込として利用したいとの希望があった。
フォーマットの仕様書を見ると、1ファイルに4種類のフォーマット、先頭の区分でレコード仕様を判定する仕様になっている。項目名(column名)の行は無い。所謂ヘッダーの行は無い。ダウンロードした実データを見ると一つ一つのレコードは素直なCSV、ややこしいパースをしなくとも素直にテキストデータを読み込めば処理出来るが、今後他銀行等CSVから取り込むこともあるだろうからCSVHelperを通しておくことにした。
CsvConfiguration に DetectColumnCountChanges = true とすると、CsvHelper.BadDataException の例外が発生する。初期値は false なので設定しなければ、例外は発生しない。
項目名の行は無く、データ行だけなので、

        var config = new CsvConfiguration(CultureInfo.InvariantCulture)
        {
            HasHeaderRecord = false             // ヘッダー無
        };

とだけ設定しておく。

List<List<string>> lCExtractedData = [];

using (var reader = new StreamReader(filePath, Encoding.GetEncoding("shift-jis")))
using (var csv = new CsvReader(reader, config))
{
    List<string> rowData = [];
    while (csv.Read())
    {
        rowData = [.. csv.Parser.Record];
        lCExtractedData.Add([.. rowData]);
    }
}

とすると、2次元のListに読み込める。

コメント