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