Ваш входной формат не является допустимым форматом CSV.Согласно странице Википедии Значения, разделенные запятыми , если цитирование вообще используется, буквальный символ кавычки в поле должен заключаться в кавычки.
Это означает, что этомаловероятно, что любая существующая библиотека синтаксического анализатора CSV общего назначения справится с обоими типами строк в одном файле.
Чтобы проиллюстрировать, насколько глубока эта проблема, рассмотрим:
130,TEXT 1" 67 SERIES, TEXT 2",4,1,998,.010,9,-,7,130
Это может означать:
- одно поле, содержащее
TEXT 1" 67 SERIES, TEXT 2"
- одно поле, содержащее
TEXT 1 67 SERIES, TEXT 2
, или - , два поля
TEXT 1" 67 SERIES
и TEXT 2"
.
Единственный способ устранить неоднозначность - это написать некую пользовательскую логику для ее сортировки.... на основе ваших собственных бизнес-правил.
Я не думаю, что вы можете сделать это с помощью split
и регулярных выражений.Вам нужно написать правильный пользовательский синтаксический анализатор.
Но в этом случае, я думаю, у вас будет право отодвинуть того, кто / что бы ни создавал эти данные CSV.Они должны следовать правилам.Я хотел бы реализовать свою систему для подачи файлов CSV через стандартную проверку синтаксиса и автоматического отклонения любых файлов, которые не проходят проверку.
Можете ли вы исправить ошибки в цитировании автоматически?Я думаю, что нет ... в общем случае.Как уже отмечалось, невозможно определить, является ли двойная кавычка в искаженном CSV буквальной или нет.Требуется человеческий интеллект и знание предметной области, чтобы понять, что означают данные.