Пишите кавычки вокруг всех полей, кроме первого (заголовка) строки
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,
};