2025/02/02

CsvHelperで血統系はダブルクォーテーションで囲う

CsvHelperはありがたく利用させて頂いてます。現行最新バージョン33.0.1です。これまでは単純にヘッダー有の指定程度でしたが、今回血統登録番号10桁の時にfloat型ではって問題対処で文字列にすればって事に気が付いたわけですが、CSVデータとして""として出力する方法としてCsvConfigurationにShouldQuoteってのがあり、これを上手く利用すればとは思いましたが、ちょっと苦労しました。基本string型をと思ったんですが、競馬場コードもstring型なのでこれは現状維持したいと思い、ちょっと苦肉の策的に

private bool ShouldQuoteKetto(ShouldQuoteArgs args)
{
    if (args.Row.Row == 1) return false;    // ヘッダー行は無し
    return !string.IsNullOrEmpty(args.Field) &&
        (
            args.Row.HeaderRecord[args.Row.Index].Contains("Chichi") ||
            args.Row.HeaderRecord[args.Row.Index].Contains("Haha")
        );
}

これを準備して

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    HasHeaderRecord = true,
    ShouldQuote = ShouldQuoteKetto
};

としてやれば上手く行きました。ちょっとこれ実現に半日以上費やしたorz

0 件のコメント:

コメントを投稿