Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
marvin-yorke opened this issue Mar 4, 2015 · 14 comments
Closed
Labels
Milestone

Comments

@marvin-yorke
Copy link
Contributor

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

Варианты:

  • заключать текстовые строки в кавычки
  • поискать другой парсер
  • попробовать настроить/переписать имеющийся
  • складывать конфигурацию в json вместо cvs (парсится нативно)
@marvin-yorke marvin-yorke added this to the 0.1 milestone Mar 4, 2015
@simgislab
Copy link
Member

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

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

@marvin-yorke
Copy link
Contributor Author

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

@marvin-yorke
Copy link
Contributor Author

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

@BishopGIS
Copy link
Member

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

@marvin-yorke
Copy link
Contributor Author

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

@BishopGIS
Copy link
Member

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

@marvin-yorke
Copy link
Contributor Author

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

@BishopGIS
Copy link
Member

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

@simgislab
Copy link
Member

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

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

@marvin-yorke
Copy link
Contributor Author

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

@marvin-yorke
Copy link
Contributor Author

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

@BishopGIS
Copy link
Member

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

@marvin-yorke
Copy link
Contributor Author

Есть 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
Copy link
Member

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

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants