텍스트 필드에 선행 0을 포함시키기 위해 ArcGIS를 사용합니까?


9

본질적으로 5 숫자 ID 인 텍스트 필드에 문자를 입력하고 있습니다. 값에 선행 0을 포함시켜야하지만 필드를 입력하거나 계산할 때마다 선행 0이 제거됩니다 (필드 속성이 5 문자 텍스트 필드라고 말하더라도).

필드에 선행 0을 포함 시키려면 어떻게해야합니까?

답변:


12

파이썬에는 제로 앞에 0이 내장되어 있습니다. str.zfill()텍스트 필드에 선행 0을 추가하는 데 사용 합니다.

my_string = "1"
print my_string.zfill(2)   # Prints 01

my_string = "1000"
print my_string.zfill(2)   # Prints 1000

( https://stackoverflow.com/a/21620624/5754917의 예 )

따라서 필드 계산기에서 ID로 필드 이름을 지정한 다음 0으로 채워야합니다.

str(!myfield!).zfill(5)

여기에 이미지 설명을 입력하십시오

그리고 최종 결과 :

여기에 이미지 설명을 입력하십시오

필드 계산기를 "Python Parser"로 전환해야합니다


좋아, 이것은 매우 간단 해 보인다. 시도해 볼게요! 감사.
CJSF

좋구나! 이것은 내가 필요로했고 너무 쉬웠습니다. 나는 거의 당황했습니다! 정말 고마워!
CJSF

3

텍스트를 따옴표로 묶으십시오. VB 스크립트 모드 인 경우 큰 따옴표, Python 모드 인 경우 큰 따옴표 또는 작은 따옴표입니다.

설명 : 숫자 만 입력하면 필드 계산기에 정수 형식으로 값을 제공하며, 문자열 유형 필드에 입력하기 위해 문자열로 변환됩니다. 정수의 경우 선행 0은 값과 의미가 없으므로 생략됩니다. 따옴표로 묶으면 이미 올바른 데이터 유형 인 문자열을 대신 전달하므로 혼자 남겨집니다.

또한이 필드는 실제로 "텍스트"유형이라고 가정합니다. Long 또는 Short Integer로 설정되어 있으면이 동작이 발생할 수도 있습니다.


고마워, 이것도 효과가 있다고 생각합니다. 그러나 결국 더 큰 반자동 프로세스의 일부로 다른 필드의 일부에서 선행 0없이 값을 가져와야합니다.
CJSF

질문을 편집하고 더 자세한 내용과 현재 가지고있는 전체 코드를 추가 할 수 있다면 더 도움이 될 것입니다. 수동으로 여러 행에 값을 쓰는 것처럼 들렸습니다.
PhilippNagel

2

파이썬 코드 블록을 사용할 수 있습니다 .

이 함수 정의를 코드 블록에 추가하십시오.

def addZero(value):
    if value <= 9:
        output = '0000' + str(value)
    elif value <= 99:
        output = '000' + str(value)
    elif value <= 999:
        output = '00' + str(value)
    elif value <= 9999:
        output = '0' + str(value)
    return output

다음과 같이 사용할 수 있습니다.

addZero(!Field!) # numeric field

또는

addZero(123) # for example

상한에 대해 <= 정의를 만들고 싶을 것입니다 :)
MaryBeth

@MaryBeth 예, 내 잘못입니다. 편집
aldo_tapia

2

다른 답변에서 언급했듯이 숫자가 문자열로 변환되어야합니다.

0을 잃어 버리거나 숫자 필드에 넣으면 문자열 열 너비 5를 만들고 다음 Python 명령을 입력하십시오.

str(!MYFIELD!).zfill(5)

@Midavalo 소유! 나는 너무 느렸다 : D
gisnside
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.