Пишите кавычки вокруг всех полей, кроме первого (заголовка) строки

CsvHelper имеет этот очень удобный флаг для установки "" вокруг всех полей (общее требование в файлах CSV):

csv.Configuration.QuoteAllFields = true;

Тем не менее, это также местами " вокруг первого ряда, который содержит имена полей.

Как может "" обвести все поля кроме первой строки, содержащей имена полей?

Я ничего не могу найти в гугле

4 ответа

Вы могли бы использовать что-то вроде этого

cw.Configuration.ShouldQuote = (field, context) => context.HasHeaderBeenWritten;

или же

cw.Configuration.ShouldQuote = (field, context) => context.Row > 1;

Но вам нужно будет проверить и настроить по мере необходимости.

При чтении кода csvhelper выясняется, что методы WriteHeader внутренне используют WriteField и устанавливают флаги, указывающие, что заголовок был написан. WriteField подчиняется текущим сконфигурированным настройкам в отношении того, должно ли оно заключать в кавычки поле или нет, и заполняет кавычки в данных поля, передаваемых во время его вызова, даже если запись в файл не обязательно происходит в это время

Поэтому я рекомендую вам сделать что-то вроде этого:

var cw = new CsvWriter(yourTextWriterOrWhatever);
cw.Configuration.QuoteNoFields = true;
cw.WriteHeaders<YourClassNameHere>();
cw.Configuration.QuoteAllFields = true; //or set QuoteNoFields = false
cw.WriteRecords(yourCollectionOfYourClass);

Просто быть чистым; Вы не можете вставить и перейти к приведенному выше коду, вы должны отредактировать его, чтобы он действовал в соответствии с вашим контекстом - везде, где вы встречаете, слово "Твой" нуждается в корректировке.

Важная часть, которую я хочу описать, состоит в том, что вы должны

  • отключить кавычки в конфиге,
  • напишите заголовки,
  • включите цитирование (либо цитируя все, либо отключив квотенполя и разрешив csvhelper определить, цитировать или нет)
  • написать записи данных

В CsvHelper V27.2.1 это делается с помощью:

       new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                HasHeaderRecord = true,
                ShouldQuote = x => x.Row.Row > 1,
            };

Начиная с версии 25.0.0 и до сегодняшнего дня, это можно сделать следующим образом:

       new CsvConfiguration(CultureInfo.InvariantCulture)
 {
     ShouldQuote = args => args.Row.HeaderRecord != null,
 };
Другие вопросы по тегам