ネットバンキングのダウンロードした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に読み込める。
コメント