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

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

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

Сообщение KartaBY » 06 янв 2016, 08:15

Доброго дня.

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

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

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

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

p/s QGIS 2.10.1
Последний раз редактировалось KartaBY 07 янв 2016, 08:20, всего редактировалось 1 раз.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3370
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 519
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 06 янв 2016, 10:14

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

regexp_substr(  "address" ,  '(^\\d+[а-я]*)')
regexp_substr(  "address" ,  '([А-Я][а-я,\\s]*)')
Spatial is now, more than ever, just another column- The Geometry Column.

KartaBY
Участник
Сообщения: 96
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 2

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

Сообщение KartaBY » 06 янв 2016, 12:06

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

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

Расшифруйте пожалуйста что есть что в "китайской грамоте". Попробую сам доработать код до требуемого функционала.
И если не тяжело, дайте ссылку где можно почитать про "китайскую грамоту".
Спасибо.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3370
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 519
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 06 янв 2016, 12:12

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

[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.

KartaBY
Участник
Сообщения: 96
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 2

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

Сообщение KartaBY » 06 янв 2016, 12:41

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

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

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

"Регулярные выражения"
\\d - Это что делает?
\\s - это что делает?
[а-я,\\s] - это что делат?
Нигде не нашел что это значит.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3370
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 519
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 06 янв 2016, 19:03

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
Участник
Сообщения: 96
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 2

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

Сообщение KartaBY » 07 янв 2016, 08:07

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

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

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

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

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

з.ы. Буду осваивать регулярные выражения. Про Википедию вы правы. там не искал. :oops:

KartaBY
Участник
Сообщения: 96
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 2

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

Сообщение KartaBY » 07 янв 2016, 08:46

з.ы.2 Вот в таком виде у меня охватывает все возможные случаи написания номера и наименования
regexp_substr( "LABEL" , '(^[0-9,а-я,a-z,_,\\s]*)[А-Я]+')
regexp_substr( "LABEL" , '([\\s,А-Я][А-Я,\\s,-]*)')

Svility
Интересующийся
Сообщения: 20
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 0
Откуда: Краснодар

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

Сообщение Svility » 17 май 2018, 20:44

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

Все записи сформированы по шаблону: “name”; “km” ‘ км’; “num”

trir
Гуру
Сообщения: 3753
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 633
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 17 май 2018, 20:59

для этого есть именованные группы

Svility
Интересующийся
Сообщения: 20
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 0
Откуда: Краснодар

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

Сообщение Svility » 17 май 2018, 21:27

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

А нельзя как то описать это так: отобрать значение любых символов начиная с конца поля, до первого пробела или знака ;

Аватара пользователя
rhot
Гуру
Сообщения: 1690
Зарегистрирован: 25 янв 2011, 17:50
Статьи: 1
Репутация: 184
Ваше звание: доктор
Откуда: Архангельск

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

Сообщение rhot » 18 май 2018, 07:25

попал?
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Svility
Интересующийся
Сообщения: 20
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 0
Откуда: Краснодар

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

Сообщение Svility » 18 май 2018, 10:28

Почти) есть номера вида 68.1 или 68.1.1 или 68л или 68_1
Хотелось бы отобрать все что находится между ; и концом

freeExec
Гуру
Сообщения: 837
Зарегистрирован: 23 апр 2011, 10:32
Проекты: 1
Репутация: 123
Откуда: Ульяновск

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

Сообщение freeExec » 18 май 2018, 11:25

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

^.+;.+;\\s*([^\\s]+)$'
Интересно, что QGIS не скипает пробелы больше одного перед группой их приходится вырезать. Но я не настоящий сварщик.

trir
Гуру
Сообщения: 3753
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 633
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 18 май 2018, 11:27

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

(?<name>[^;]+);(?<km>[^;]+)км;(?<num>.+)

Ответить

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

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

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