Запись кавычек в определенные поля CSV с помощью CsvHelper
При записи файла CSV необходимо указывать только определенные столбцы. Используя CsvHelper 6.1.0, существует ли какой-либо способ индивидуальной настройки полей, в частности, заключены ли они в кавычки?
Поле1, Поле2, Поле3, Поле4, Поле5, Поле6 "Цитируется", "Цитируется", NotQuoted, NotQuoted, NotQuoted, "Цитируется" "Цитируется", "Цитируется", NotQuoted, NotQuoted, NotQuoted, "Цитируется"
До сих пор я нашел только в объекте конфигурации QuoteAllFields и QuoteNoFields.
1 ответ
Вы можете сделать это с помощью Class Mapping.
Вы можете начать с автоматического определения класса, а затем отредактировать поля, которые хотите отображать в кавычках. Что-то вроде этого:
public sealed class MyClassMap : ClassMap<MyClass> {
public MyClassMap() {
AutoMap();
Map(m => m.Field1).ConvertUsing(m => $"\"{m.Field1}\"");
Map(m => m.Field2).ConvertUsing(m => $"\"{m.Field2}\"");
Map(m => m.Field6).ConvertUsing(m => $"\"{m.Field6}\"");
}
}
Затем вы применяете его, когда пишете файл следующим образом:
CsvWriter myWriter = new CsvWriter(stream);
myWriter.Configuration.RegisterClassMap<MyClassMap>();
Я не совсем уверен, является ли это "правильным" способом сделать это, однако он, безусловно, кажется самым простым. Вы могли бы реализовать TypeConverter
это помещает в кавычки, но это кажется слишком большой работой для чего-то такого простого...
Я знаю, что OP спросил о 6.1.0, но в случае, если он помогает другим, есть лучшее решение для версии 12:
var indexesToQuote = new[] { 0, 2 };
csv.Configuration.ShouldQuote = (field, context) =>
indexesToQuote.Contains(context.Record.Count) &&
context.HasHeaderBeenWritten;