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?

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.


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.


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

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)

Im Besitz von @Midavalo! Ich war zu langsam: D
Gisnside
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.