Closed marvin-yorke closed 9 years ago
ого, ну это явно парсера проблема, ни с каким другим ридером такого не встречали
там нельзя delimiter настраивать?
Можно, ставлю ; (точку с запятой), он её нормально обрабатывает. Но если в текстовом поле есть скобки, он почему-то их тоже воспринимает как разделитель и ломается
davedelong/CHCSVParser#79 Создал ишью, но вряд ли там ответят быстро. Буду пока искать решение сам
Я думаю правильнее на сервере готовить валидные файлы, чем перекладывать эту задачу на телефон. Тут есть 2 варианта - либо сделать такой формат, что бы парсеры на обоих платформах ели без проблем, либо готовить разные наборы для разных платформ.
@BishopGIS самым удобным для меня вариантом была бы конфигурация в JSON. Еще лучше - сразу на сервере генерить SQLite seed-database, потому что она все равно будет генерироваться из полученных данных на каждом устройстве и будет для всех одинаковой, но для этого нужен Mac-сервер (используемый в IOS стек БД не портирован и не будет портирован на Linux, увы). Как вообще происходит генерация этих CSV?
От базы отказались, т.к. данные на разные города распространяются отдельно. Не генерить же по базе на каждый город? JSON - вариант, но на текущем формате (CSV) работает не только мобильное приложение, но и веб клиент (если я не ошибаюсь). А это уже серьезная переделка. Кроме того, уже задуман веб сервис, который работает по REST API и на запрос выдает как раз JSON.
Окей, а экранировать текстовые строки кавычками в CSV мы можем? Это вроде бы самое простое решение, на имеющиеся реализации повлиять не должно (хотя надо проверять, безусловно)
Надо на Андроиде проверять. Там тоже CSV парсер далеко не идеальный. В любом случае нужен тестовый набор CSV для проверки.
ох товарищи, ну как это возможно? воспринимать как разделитель символ, который не разделитель? ну как...
Макс, а поискать другой парсер CSV не вариант? Просто если этот делает такое, то не факт что он еще что-нибудь более ужасное не делает.
Это самый популярный для iOS, насколько я понимаю. Есть еще один, попробую его. CSV все-таки не самый популярный формат данных сегодня на мобильных платформах, поэтому видимо никто особо не заморачивался написанием корректного парсера
Я тут посмотрел еще раз, на чем там парсер спотыкается.
17530;2;"Крокус Экспо" (павильон 1, 2);215;both;55.8235522598;37.3855503584;800;56;0;0;0;400;950;23;0
Проблема оказалась не в скобках, а в кавычках. Он берет закавыченную строку как значение поля, а остальное считает уже следующим полем. И это увы соответствует спецификации, так что парсер как раз все правильно делает, а вот данные кривые
А разве есть спецификация csv? Кажется там как раз проблема, что нет четкой спецификации, а только набор практик.
Есть http://www.rfc-editor.org/rfc/rfc4180.txt
Each field may or may not be enclosed in double quotes (however
some programs, such as Microsoft Excel, do not use double quotes
at all). If fields are not enclosed with double quotes, then
double quotes may not appear inside the fields.
страаано, в принципе это я могу поправить при подготовке пакета и никто же не отменял quote character (в других местах).
Еще, я правильно понял, что мне надо просто сделать:
A (double) quote character in a field must be represented by two (double) quote characters.
и дело в шляпе?
Скобки в текстовых полях (portals_ru.csv) воспринимаются как резделители.
Варианты: