CsvHelper を利用してCSV出力処理を作成しています。
この出力時に、文字列の場合のみダブルクォートを付けて出力したいのですが、上手くいきません。
半角スペース、カンマ、改行コード等が入っている場合にのみダブルクォートが付与される状況です。
出力するプロパティの型がstringの場合に付与出来るのが理想ですが、
何か方法はありませんでしょうか?
または、CsvHelper.Configuration.QuoteAllFields に true を設定したうえで、
任意の列のみダブルクォートを外す方法がありますか?
###追記
力技として、出力文字列の前後にダブルクォートを付与することで、
3連続のダブルクォート「"""」を出力し、
出来上がったファイルを開いて一括置換するという方法を取れますが、
できれば一回の出力で綺麗に作成したいと思っています。。。
###追記2
コメントへの返信ではMarkDownが利用できなかったので、
修正後のコードをこちらに追記します。
c#
1// データ出力部 2using (var sw = new StreamWriter(path, false, System.Text.Encoding.GetEncoding("shift_jis"))) 3using (var csv = new CsvHelper.CsvWriter(sw)) { 4 csv.Configuration.RegisterClassMap(mapper); 5 csv.Configuration.HasHeaderRecord = false; 6 7 csv.Configuration.QuoteAllFields = false; 8 csv.Configuration.QuoteNoFields = true; 9 10 foreach (var data in dataList) { 11 csv.WriteRecord(data); 12 } 13} 14 15// StringConverter実装クラス 16public class AddQuoteConverter : CsvHelper.TypeConversion.StringConverter { 17 public override string ConvertToString(TypeConverterOptions options, object value) { 18 return @"""" + base.ConvertToString(options, value) + @""""; 19 } 20}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/26 01:02 編集
2017/10/26 02:13