Сценарий 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(...),
};
Мобильная версия