Непоследовательная обработка незакрытых кавычек в заголовках и строках данных (BadDataException и несоответствие молчалиC#

Место общения программистов C#
Ответить
Anonymous
 Непоследовательная обработка незакрытых кавычек в заголовках и строках данных (BadDataException и несоответствие молчали

Сообщение Anonymous »

Я пытаюсь понять поведение CsvHelper при работе с незакрытыми кавычками и заметил несогласованную обработку между строками заголовка и строками данных.
Сценарий 1 – незакрытая кавычка в заголовке (выдает исключение)

Id;"Name;Age

1;Alice;30

2;Bob;25

3;Charlie;40
Это приводит к возникновению исключения BadDataException во время анализа заголовка (например, при вызове ReadHeader() или инициализации CsvDataReader).
Сценарий 2 – незакрытая кавычка в строке данных (без исключений)

Id;Name;Age

1;"Алиса;30

2;Боб;25

3;Чарли;40
В этом случае:
Исключение BadDataException не создается

Но первая строка данных оказывается с непостоянным количеством столбцов (оставшиеся поля смещаются или становятся нулевыми)
Вопросы
  • Является ли такое различие в поведении преднамеренным?

    а. Анализ заголовка дает сбой быстро, но анализ строк более толерантен?
  • В режиме RFC4180 следует ли считать незамкнутое поле в кавычках в строке данных действительным/восстанавливаемым?
  • Существует ли рекомендуемый способ обеспечить более строгую проверку, чтобы:

    a. Незакрытые кавычки в строках данных также вызывают исключения (аналогично поведению заголовка)?

    b. Вместо того, чтобы автоматически создавать некорректные записи?
  • Существуют ли параметры или шаблоны конфигурации (помимо ручной проверки), позволяющие обеспечить единообразие поведения синтаксического анализа в заголовке и строках?
Используемая конфигурация:
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Mode = CsvMode.RFC4180,
DetectColumnCountChanges = true,
BadDataFound = args => throw new Exception(...),
};
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»