Страница 1 из 1
построение label expression
Добавлено: 28 ноя 2013, 21:06
julia
Помогите, пожалуйста решить такую задачу. С построением выражений раньше не сталкивалась, да и вообще, если честно, в написании чего-либо на python или VBScript я не сильна.
Ситуация следующая, в поле, по которому я ставлю подписи, находится полный адрес зданий, а мне надо вычленить только номера домов + литер. Вот пример одного из адресов: Санкт-Петербург, город Петергоф, улица Дзержинского, дом 21, литер А. Как мне из всего этого получить 21А?
Спасибо заранее!
Re: построение label expression
Добавлено: 29 ноя 2013, 03:16
doujin
Если у вас действительно все записи оформлены как
"Санкт-Петербург, город Петергоф, улица Дзержинского, дом 21, литер А", то есть части адреса разделены запятыми, литера и дом идут последними, а части внутри имеют пробел, то можно использовать следующий код на 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.
Re: построение label expression
Добавлено: 29 ноя 2013, 18:13
julia
Спасибо, за помощь, но выражение не срабатывает. Выкидывает ошибку:
---------------------------
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
---------------------------
Re: построение label expression
Добавлено: 29 ноя 2013, 22:59
doujin
Значит у вас не все записи соответствуют шаблону. Судя по ошибке, есть строки, в которых вообще нет запятых. Можно поправить скрипт так:
Код: Выделить всё
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
Re: построение label expression
Добавлено: 01 дек 2013, 20:42
julia
Спасибо огромное!! Второй скрипт сработал отлично, все получилось!