nextgis / metro4all-ios

Metro4All app for iOS
GNU General Public License v3.0
1 stars 5 forks source link

CSV парсер не ест Москву из-за скобок #3

Closed marvin-yorke closed 9 years ago

marvin-yorke commented 9 years ago

Скобки в текстовых полях (portals_ru.csv) воспринимаются как резделители.

Варианты:

simgislab commented 9 years ago

ого, ну это явно парсера проблема, ни с каким другим ридером такого не встречали

там нельзя delimiter настраивать?

marvin-yorke commented 9 years ago

Можно, ставлю ; (точку с запятой), он её нормально обрабатывает. Но если в текстовом поле есть скобки, он почему-то их тоже воспринимает как разделитель и ломается

marvin-yorke commented 9 years ago

davedelong/CHCSVParser#79 Создал ишью, но вряд ли там ответят быстро. Буду пока искать решение сам

BishopGIS commented 9 years ago

Я думаю правильнее на сервере готовить валидные файлы, чем перекладывать эту задачу на телефон. Тут есть 2 варианта - либо сделать такой формат, что бы парсеры на обоих платформах ели без проблем, либо готовить разные наборы для разных платформ.

marvin-yorke commented 9 years ago

@BishopGIS самым удобным для меня вариантом была бы конфигурация в JSON. Еще лучше - сразу на сервере генерить SQLite seed-database, потому что она все равно будет генерироваться из полученных данных на каждом устройстве и будет для всех одинаковой, но для этого нужен Mac-сервер (используемый в IOS стек БД не портирован и не будет портирован на Linux, увы). Как вообще происходит генерация этих CSV?

BishopGIS commented 9 years ago

От базы отказались, т.к. данные на разные города распространяются отдельно. Не генерить же по базе на каждый город? JSON - вариант, но на текущем формате (CSV) работает не только мобильное приложение, но и веб клиент (если я не ошибаюсь). А это уже серьезная переделка. Кроме того, уже задуман веб сервис, который работает по REST API и на запрос выдает как раз JSON.

marvin-yorke commented 9 years ago

Окей, а экранировать текстовые строки кавычками в CSV мы можем? Это вроде бы самое простое решение, на имеющиеся реализации повлиять не должно (хотя надо проверять, безусловно)

BishopGIS commented 9 years ago

Надо на Андроиде проверять. Там тоже CSV парсер далеко не идеальный. В любом случае нужен тестовый набор CSV для проверки.

simgislab commented 9 years ago

ох товарищи, ну как это возможно? воспринимать как разделитель символ, который не разделитель? ну как...

Макс, а поискать другой парсер CSV не вариант? Просто если этот делает такое, то не факт что он еще что-нибудь более ужасное не делает.

marvin-yorke commented 9 years ago

Это самый популярный для iOS, насколько я понимаю. Есть еще один, попробую его. CSV все-таки не самый популярный формат данных сегодня на мобильных платформах, поэтому видимо никто особо не заморачивался написанием корректного парсера

marvin-yorke commented 9 years ago

Я тут посмотрел еще раз, на чем там парсер спотыкается. 17530;2;"Крокус Экспо" (павильон 1, 2);215;both;55.8235522598;37.3855503584;800;56;0;0;0;400;950;23;0 Проблема оказалась не в скобках, а в кавычках. Он берет закавыченную строку как значение поля, а остальное считает уже следующим полем. И это увы соответствует спецификации, так что парсер как раз все правильно делает, а вот данные кривые

BishopGIS commented 9 years ago

А разве есть спецификация csv? Кажется там как раз проблема, что нет четкой спецификации, а только набор практик.

marvin-yorke commented 9 years ago

Есть 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. 
simgislab commented 9 years ago

страаано, в принципе это я могу поправить при подготовке пакета и никто же не отменял quote character (в других местах).

Еще, я правильно понял, что мне надо просто сделать:

A (double) quote character in a field must be represented by two (double) quote characters.

и дело в шляпе?