Czy ArcGIS ma zawierać wiodące zera w polu tekstowym?

9

Wprowadzam znaki w polu tekstowym, które jest zasadniczo 5 cyfrowym identyfikatorem. Potrzebuję, aby wartości początkowe były zawarte w wartości, ale za każdym razem, gdy wprowadzam lub obliczam pole, zera wiodące są usuwane (nawet jeśli właściwości pola mówią, że jest to 5-znakowe pole tekstowe).

Jak zmusić pole do uwzględnienia zer wiodących?

CJSF
źródło

Odpowiedzi:

12

Python ma wbudowane wiodące zera. Służy str.zfill()do dodawania zer wiodących w polu tekstowym.

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

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

(przykład z https://stackoverflow.com/a/21620624/5754917 )

Tak więc w kalkulatorze pola wystarczy podać nazwę pola za pomocą identyfikatora, a następnie wypełnić zerami

str(!myfield!).zfill(5)

wprowadź opis zdjęcia tutaj

I efekt końcowy:

wprowadź opis zdjęcia tutaj

Pamiętaj, aby przełączyć kalkulator pola na „Parser Pythona”

Midavalo
źródło
OK, wydaje się to bardzo proste. Dam temu szansę! Dzięki.
CJSF,
W porządku! Właśnie tego potrzebowałem i było tak łatwe, że jestem prawie zawstydzony! Dzięki wielkie!
CJSF,
3

Wystarczy wpisać tekst w cudzysłowie. Podwójne cudzysłowy, jeśli jesteś w trybie skryptu VB, i podwójne lub pojedyncze, jeśli w trybie Pythona.

Wyjaśniając: Po prostu wpisując liczby, podajesz Kalkulatorowi pola wartość w postaci liczb całkowitych, które przekształci on w ciąg znaków, aby wprowadzić go do pola typu ciągu. W przypadku liczb całkowitych zera wiodące nie mają żadnej wartości ani znaczenia, więc zostały pominięte. Jeśli umieścisz go w cudzysłowie, zamiast tego przekażesz ciąg znaków, który jest już poprawnym typem danych, więc zostaje pozostawiony samemu sobie.

Zakłada się również, że to pole jest w rzeczywistości typu „Tekst”. Może ustawiono długą lub krótką liczbę całkowitą, co również spowodowałoby takie zachowanie.

PhilippNagel
źródło
Dzięki, myślę, że to też zadziała. Ale w końcu będę musiał pobrać wartość bez zer wiodących z części innego pola w ramach większego półautomatycznego procesu.
CJSF,
Jeśli możesz edytować swoje pytanie i dodać więcej szczegółów oraz cały kod, który aktualnie posiadasz, prawdopodobnie moglibyśmy Ci pomóc lepiej. Brzmiało to tak, jakbyś tylko ręcznie zapisywał wartości w szeregu wierszy.
PhilippNagel,
2

Możesz użyć bloku kodu Python .

Dodaj tę definicję funkcji do bloku kodu:

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

Możesz użyć go jako:

addZero(!Field!) # numeric field

lub

addZero(123) # for example
aldo_tapia
źródło
Będziesz chciał wprowadzić definicje <= dla górnych limitów :)
MaryBeth,
@MaryBeth tak, moja wina. Edytowano
aldo_tapia,
2

Jak wspomniano w innych odpowiedziach, musisz upewnić się, że Twoje liczby są konwertowane na ciągi.

Jeśli stracisz swoje zera lub masz je w polu numerycznym, utwórz kolumnę o szerokości 5, po prostu wpisz następującą komendę Python:

str(!MYFIELD!).zfill(5)
gisnside
źródło
Należy do @Midavalo! Byłem zbyt wolny: D
gisnside,