ArcGIS dazu bringen, führende Nullen in das Textfeld aufzunehmen?

9

Ich gebe Zeichen in ein Textfeld ein, das im Wesentlichen eine ID mit 5 Zahlen ist. Ich brauche führende Nullen, um in den Wert aufgenommen zu werden, aber jedes Mal, wenn ich das Feld eingebe oder berechne, werden die führenden Nullen entfernt (obwohl die Feldeigenschaften sagen, dass es sich um ein 5-stelliges Textfeld handelt).

Wie erzwinge ich, dass das Feld führende Nullen enthält?

CJSF
quelle

Antworten:

12

Python verfügt über eine integrierte Funktion für führende Nullen. Verwenden Sie str.zfill()diese Option , um einem Textfeld führende Nullen hinzuzufügen.

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

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

(Beispiel von https://stackoverflow.com/a/21620624/5754917 )

Im Feldrechner müssen Sie also nur den Namen des Feldes mit Ihrer ID angeben und dann mit Nullen füllen

str(!myfield!).zfill(5)

Geben Sie hier die Bildbeschreibung ein

Und das Endergebnis:

Geben Sie hier die Bildbeschreibung ein

Denken Sie daran, den Feldrechner auf "Python Parser" zu stellen.

Midavalo
quelle
OK, das scheint sehr einfach zu sein. Ich werde es versuchen! Vielen Dank.
CJSF
In Ordung! Das ist genau das, was ich brauchte und war so einfach, dass es mir fast peinlich ist! Vielen Dank!
CJSF
3

Setzen Sie einfach Ihren Text in Anführungszeichen. Doppelte Anführungszeichen, wenn Sie sich im VB-Skriptmodus befinden, und doppelte oder einfache Anführungszeichen, wenn Sie sich im Python-Modus befinden.

Zur Erklärung: Wenn Sie nur die Zahlen eingeben, geben Sie dem Feldrechner einen ganzzahligen Wert, der für Sie in eine Zeichenfolge konvertiert wird, um ihn in das Feld für den Zeichenfolgentyp einzugeben. Bei ganzen Zahlen haben die führenden Nullen keinen Wert und keine Bedeutung, daher werden sie weggelassen. Wenn Sie es in Anführungszeichen setzen, übergeben Sie ihm stattdessen eine Zeichenfolge, die bereits den richtigen Datentyp hat, sodass sie in Ruhe gelassen wird.

Dies setzt auch voraus, dass dieses Feld tatsächlich vom Typ "Text" ist. Vielleicht wurde es auf Long oder Short Integer gesetzt, was auch dieses Verhalten verursachen würde.

PhilippNagel
quelle
Danke, ich denke, das wird auch funktionieren. Aber irgendwann muss ich den Wert ohne die führenden Nullen aus einem Teil eines anderen Feldes als Teil eines größeren halbautomatischen Prozesses abrufen.
CJSF
Wenn Sie Ihre Frage bearbeiten und weitere Details sowie den gesamten Code hinzufügen können, den Sie derzeit haben, könnten wir Ihnen wahrscheinlich besser helfen. Es klang, als würden Sie nur manuell Werte in eine Reihe von Zeilen schreiben.
Philipp Nagel
2

Sie können einen Python-Codeblock verwenden .

Fügen Sie diese Funktionsdefinition im Codeblock hinzu:

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

Sie können es verwenden als:

addZero(!Field!) # numeric field

oder

addZero(123) # for example
aldo_tapia
quelle
Sie möchten die Definitionen <= für die oberen Grenzen machen :)
MaryBeth
@ MaryBeth ja, meine Schuld. Bearbeitet
aldo_tapia
2

Wie in den anderen Antworten erwähnt, müssen Sie sicherstellen, dass Ihre Zahlen in Zeichenfolgen umgewandelt werden.

Wenn Sie Ihre Nullen verlieren oder in einem numerischen Feld haben, erstellen Sie eine Zeichenfolgenspaltenbreite 5. Geben Sie einfach den folgenden Python-Befehl ein:

str(!MYFIELD!).zfill(5)
gisnside
quelle
Im Besitz von @Midavalo! Ich war zu langsam: D
Gisnside