Запись кавычек в определенные поля 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;
Другие вопросы по тегам