Як ArcGIS включати провідні нулі в текстове поле?


9

Я вводжу символи в текстове поле, яке по суті є ідентифікатором 5 чисел. Мені потрібні провідні нулі, щоб вони були включені у значення, але щоразу, коли я ввожу чи обчислюю поле, провідні нулі видаляються (навіть якщо властивості поля кажуть, що це текстове поле з 5 символів).

Як змусити поле включати провідні нулі?

Відповіді:


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, і подвійні або одинарні, якщо в режимі Python.

Для пояснення: Коли ви просто вводите цифри, ви даєте Field Calculator значення в цілій формі, яке воно перетворить у рядок для вас, щоб ввести його в поле типу рядка. Для цілих чисел провідні нулі не мають значення і не мають значення, тому вони опущені. Якщо ви помістите це в лапки, ви замість цього передаєте йому рядок, яка вже є правильним типом даних, тому вона залишається в спокої.

Це також передбачає, що це поле фактично типу "Текст". Можливо, це було встановлено на Long або Short Integer, що також спричинило б таку поведінку.


Дякую, я думаю, це теж спрацює. Але мені в кінцевому підсумку потрібно буде захопити значення без провідних нулів з частини іншого поля як частини більшого напівавтоматичного процесу.
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

Ви хочете зробити визначення <= для верхніх меж :)
MaryBeth

@MaryBeth так, моя провина. Редаговано
aldo_tapia

2

Як вже згадувалося в інших відповідях, вам потрібно переконатися, що ваші номери перетворені в рядки.

Якщо ви втрачаєте 0, або розміщуєте їх у числовому полі, створіть стовпчик рядка шириною 5, просто введіть таку команду Python:

str(!MYFIELD!).zfill(5)

Володіє @Midavalo! Я був надто повільний: D
gisnside
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.