построение label expression
- julia
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 28 ноя 2013, 21:00
- Репутация: 0
- Откуда: Krasnodar
построение label expression
Помогите, пожалуйста решить такую задачу. С построением выражений раньше не сталкивалась, да и вообще, если честно, в написании чего-либо на python или VBScript я не сильна.
Ситуация следующая, в поле, по которому я ставлю подписи, находится полный адрес зданий, а мне надо вычленить только номера домов + литер. Вот пример одного из адресов: Санкт-Петербург, город Петергоф, улица Дзержинского, дом 21, литер А. Как мне из всего этого получить 21А?
Спасибо заранее!
Ситуация следующая, в поле, по которому я ставлю подписи, находится полный адрес зданий, а мне надо вычленить только номера домов + литер. Вот пример одного из адресов: Санкт-Петербург, город Петергоф, улица Дзержинского, дом 21, литер А. Как мне из всего этого получить 21А?
Спасибо заранее!
-
- Активный участник
- Сообщения: 163
- Зарегистрирован: 28 июн 2012, 01:02
- Репутация: 84
- Откуда: Vladivostok
Re: построение label expression
Если у вас действительно все записи оформлены как "Санкт-Петербург, город Петергоф, улица Дзержинского, дом 21, литер А", то есть части адреса разделены запятыми, литера и дом идут последними, а части внутри имеют пробел, то можно использовать следующий код на python:
В окне составления выражения поставьте галочку Advanced и скопируйте туда код. Замените field1 на название вашего поля с адресами. В качестве парсера не забудьте выбрать python.
Код: Выделить всё
def FindLabel ( [field1] ):
s = [field1]
sub_s1 = s.split(u',')[-1].split(u' ')[-1]
if sub_s1.isnumeric():
return sub_s1
else:
sub_s2 = s.split(u',')[-2].split(u' ')[-1]
return sub_s2 + sub_s1
В окне составления выражения поставьте галочку Advanced и скопируйте туда код. Замените field1 на название вашего поля с адресами. В качестве парсера не забудьте выбрать python.
- julia
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 28 ноя 2013, 21:00
- Репутация: 0
- Откуда: Krasnodar
Re: построение label expression
Спасибо, за помощь, но выражение не срабатывает. Выкидывает ошибку:
---------------------------
ArcMap
---------------------------
The expression contains an error.
Modify the expression and try again.
Error 0 on line 0.
Error running expression: FindLabel(ESRIExpressionArg0)
Traceback (most recent call last):
File "<expression>", line 1, in <module>
File "<string>", line 7, in FindLabel
IndexError: list index out of range
.
---------------------------
OK
---------------------------
---------------------------
ArcMap
---------------------------
The expression contains an error.
Modify the expression and try again.
Error 0 on line 0.
Error running expression: FindLabel(ESRIExpressionArg0)
Traceback (most recent call last):
File "<expression>", line 1, in <module>
File "<string>", line 7, in FindLabel
IndexError: list index out of range
.
---------------------------
OK
---------------------------
-
- Активный участник
- Сообщения: 163
- Зарегистрирован: 28 июн 2012, 01:02
- Репутация: 84
- Откуда: Vladivostok
Re: построение label expression
Значит у вас не все записи соответствуют шаблону. Судя по ошибке, есть строки, в которых вообще нет запятых. Можно поправить скрипт так:
Код: Выделить всё
def FindLabel ( [field1] ):
s = [field1]
if u',' in s:
sub_s1 = s.split(u',')[-1].split(u' ')[-1]
sub_s2 = s.split(u',')[-2].split(u' ')[-1]
else:
sub_s1 = sub_s2 = u''
if sub_s1.isnumeric():
return sub_s1
else:
return sub_s2 + sub_s1
- julia
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 28 ноя 2013, 21:00
- Репутация: 0
- Откуда: Krasnodar
Re: построение label expression
Спасибо огромное!! Второй скрипт сработал отлично, все получилось!
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя