Пишите кавычки вокруг всех полей, кроме первого (заголовка) строки - PullRequest
0 голосов
/ 24 ноября 2018

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

csv.Configuration.QuoteAllFields = true;

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

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

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

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

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

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

или

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

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

0 голосов
/ 24 ноября 2018

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

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

var cw = new CsvWriter(yourTextWriterOrWhatever);
cw.Configuration.QuoteNoFields = true;
cw.WriteHeader<YourClassNameHere>();
cw.NextRecord(); // without this first row is on same line as header
cw.Configuration.QuoteAllFields = true; //or set QuoteNoFields = false
cw.WriteRecords(yourCollectionOfYourClass);

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

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

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