Я обрабатываю данные из правительственных источников (FEC, государственных баз данных избирателей и т. д. ). Он непоследовательно искажен, что ломает мой синтаксический анализатор CSV всевозможными восхитительными способами.
Это внешний источник и авторитетный. Я должен разобрать его, и я не могу -ввести его, проверить на входе и т.п.Что есть, то есть; Я не контролирую ввод.
Свойства:
Foo \xAB bar
)"foo",123,"bar"
)или без кавычек(foo,123,bar
). Я еще не встречал ни одного случая, когда он смешивается в пределах заданной строки (, т.е."foo",123,bar
)но это, вероятно, там.Я использую Ruby FasterCSV (, известную как просто CSV в версии 1.9 ), но вопрос не должен зависеть от языка -.
Я предполагаю, что решение потребует замены предварительной обработки однозначным разделителем записей/символами кавычек (, например, ASCII RS, STX ). Я начал немного здесь , но это не работает для всего, что я получаю.
Как я могу надежно обрабатывать такие грязные данные?
ETA :Вот упрощенный пример того, что может быть в одном файле:
"this","is",123,"a","normal","line" "line","with "an" internal","quote" "short line","with an "internal quote", 1 comma and linebreaks" un "quot" ed,text,with,1,2,3,numbers "quoted","number","series","1,2,3" "invalid \xAB utf-8"