Страница 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
				Спасибо огромное!! Второй скрипт сработал отлично, все получилось!