Калькулятор полей

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Калькулятор полей

Сообщение KartaBY »

Доброго дня.

Есть точечный шейп у которого в атрибутах адресные данные стоят как:

12Мира
234аСоветская

и т.д.
Требуется разнести в калькуляторе полей номер(с буквой если есть) отдельно, а название улицы отдельно.

Помогите составить выражение.

p/s QGIS 2.10.1
Последний раз редактировалось KartaBY 07 янв 2016, 08:20, всего редактировалось 1 раз.
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Калькулятор полей

Сообщение Denis Rykov »

Код: Выделить всё

regexp_substr(  "address" ,  '(^\\d+[а-я]*)')
regexp_substr(  "address" ,  '([А-Я][а-я,\\s]*)')
Spatial is now, more than ever, just another column- The Geometry Column.
KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Калькулятор полей

Сообщение KartaBY »

Ух. Круто. Работает. Но немного не так.

( "address" , '(^\\d+[а-я]*)')
"address" - обрабатываемый столбец
(^\\d+[а-я]*) и ([А-Я][а-я,\\s]*) - китайская грамота :-)

Расшифруйте пожалуйста что есть что в "китайской грамоте". Попробую сам доработать код до требуемого функционала.
И если не тяжело, дайте ссылку где можно почитать про "китайскую грамоту".
Спасибо.
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Калькулятор полей

Сообщение Denis Rykov »

Это называется "регулярные выражения". А что именно работает не так? Приведённые вами примеры должны правильно разбираться.

[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.
KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Калькулятор полей

Сообщение KartaBY »

regexp_substr( "address" , '(^\\d+[а-я]*)')

Переносит только цифровую часть. Но здесь возможно вопрос в том что корпуса домов написаны латиницей a,b,c.
Поэтому в варианте 23а3 переносит только 23.
Возможно надо фильтровать до первой буквы в верхнем регистре т.к. все улицы начинаются с большой буквы.

regexp_substr( "address" , '([А-Я][а-я,\\s]*)')
Создает пустой столбец без значений.

"Регулярные выражения"
\\d - Это что делает?
\\s - это что делает?
[а-я,\\s] - это что делат?
Нигде не нашел что это значит.
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Калькулятор полей

Сообщение Denis Rykov »

KartaBY писал(а):Возможно надо фильтровать до первой буквы в верхнем регистре т.к. все улицы начинаются с большой буквы.
Например, так:

Код: Выделить всё

regexp_substr(  "address" ,  '(^[0-9,а-я,a-z]*)[А-Я]+')
KartaBY писал(а):regexp_substr( "address" , '([А-Я][а-я,\\s]*)')
Создает пустой столбец без значений.
Пример адреса приведите.

\\d - цифра
\\s - пробел
\\[а-я,\\s]* - символы из указанного набора могут повторяться 0 и более раз
KartaBY писал(а):Нигде не нашел что это значит.
А где вы искали, если не секрет, в той же Википедии всё подробно расписано.
Spatial is now, more than ever, just another column- The Geometry Column.
KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Калькулятор полей

Сообщение KartaBY »

regexp_substr( "address" , '(^[0-9,а-я,a-z]*)[А-Я]+')

Работает как положено!

regexp_substr( "address" , '([А-Я][а-я,\\s]*)')

Тоже работает. Это я был не внимательным. Создавал новое поле как "число". Когда поставил как "текст" то все заработало.

Огромное спасибо за помощь.

з.ы. Буду осваивать регулярные выражения. Про Википедию вы правы. там не искал. :oops:
KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Калькулятор полей

Сообщение KartaBY »

з.ы.2 Вот в таком виде у меня охватывает все возможные случаи написания номера и наименования
regexp_substr( "LABEL" , '(^[0-9,а-я,a-z,_,\\s]*)[А-Я]+')
regexp_substr( "LABEL" , '([\\s,А-Я][А-Я,\\s,-]*)')
Аватара пользователя
Svility
Участник
Сообщения: 55
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 5
Откуда: 32637

Re: Калькулятор полей

Сообщение Svility »

Как из такой записи:
Название; 0.68 км; 68
вытащить значение 68 ?

Все записи сформированы по шаблону: “name”; “km” ‘ км’; “num”
trir
Гуру
Сообщения: 5362
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Калькулятор полей

Сообщение trir »

для этого есть именованные группы
Аватара пользователя
Svility
Участник
Сообщения: 55
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 5
Откуда: 32637

Re: Калькулятор полей

Сообщение Svility »

Чувствую быстро не разобраться(

А нельзя как то описать это так: отобрать значение любых символов начиная с конца поля, до первого пробела или знака ;
Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Калькулятор полей

Сообщение rhot »

попал?
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
Аватара пользователя
Svility
Участник
Сообщения: 55
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 5
Откуда: 32637

Re: Калькулятор полей

Сообщение Svility »

Почти) есть номера вида 68.1 или 68.1.1 или 68л или 68_1
Хотелось бы отобрать все что находится между ; и концом
freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: Калькулятор полей

Сообщение freeExec »

Код: Выделить всё

^.+;.+;\\s*([^\\s]+)$'
Интересно, что QGIS не скипает пробелы больше одного перед группой их приходится вырезать. Но я не настоящий сварщик.
trir
Гуру
Сообщения: 5362
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Калькулятор полей

Сообщение trir »

Код: Выделить всё

(?<name>[^;]+);(?<km>[^;]+)км;(?<num>.+)
Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей