Получение ArcGIS для включения начальных нулей в текстовое поле?

9

Я ввожу символы в текстовое поле, которое по сути является 5-значным идентификатором. Мне нужно, чтобы начальные нули были включены в значение, но каждый раз, когда я вхожу или вычисляю поле, начальные нули удаляются (даже если свойства поля говорят, что это текстовое поле из 5 символов).

Как заставить поле включить ведущие нули?

CJSF
источник

Ответы:

12

В Python есть встроенный для ведущих нулей. Используйте str.zfill()для добавления начальных нулей в текстовое поле.

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 )

Так что в калькуляторе полей вам просто нужно указать имя поля с вашим идентификатором, а затем заполнить нулями

str(!myfield!).zfill(5)

введите описание изображения здесь

И конечный результат:

введите описание изображения здесь

Не забудьте переключить полевой калькулятор на «Python Parser»

Мидавало
источник
ОК, это кажется очень простым. Я попробую! Спасибо.
CJSF
Хорошо! Это именно то, что мне было нужно и было так легко, я почти смутился! Спасибо!
CJSF
3

Просто поместите свой текст в кавычки. Двойные кавычки, если вы находитесь в режиме VB Script, и двойные или одинарные, если вы находитесь в режиме Python.

Объяснение: Когда вы просто вводите числа, вы присваиваете Калькулятору полей значение в целочисленной форме, которое будет преобразовано в строку для вас, чтобы ввести ее в поле типа строки. Для целых чисел ведущие нули не имеют значения и значения, поэтому они опускаются. Если вы помещаете его в кавычки, вы вместо этого передаете ему строку, которая уже является правильным типом данных, поэтому она остается одна.

Это также предполагает, что это поле на самом деле имеет тип «Текст». Может быть, он был установлен в Long или Short Integer, что также может вызвать такое поведение.

PhilippNagel
источник
Спасибо, думаю, это тоже сработает. Но в конечном итоге мне нужно будет получить значение без начальных нулей из части другого поля как часть более крупного полуавтоматического процесса.
CJSF
Если вы сможете отредактировать свой вопрос и добавить дополнительные сведения и весь код, который у вас есть, мы, вероятно, могли бы помочь вам лучше. Это звучало так, как будто вы просто вручную записывали значения в ряд строк.
PhilippNagel
2

Вы можете использовать блок кода Python .

Добавьте это определение функции в блок кода:

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
aldo_tapia
источник
Вы захотите сделать определения <= для верхних пределов :)
MaryBeth
@MaryBeth да, моя вина. Отредактировано
aldo_tapia
2

Как упоминалось в других ответах, вам нужно убедиться, что ваши числа преобразованы в строки.

Если вы потеряете свои 0 или получите их в числовом поле, создайте строковый столбец шириной 5, просто введите следующую команду Python:

str(!MYFIELD!).zfill(5)
gisnside
источник
Принадлежит @Midavalo! Я был слишком медленным: D
gisnside