¿Hacer que ArcGIS incluya ceros a la izquierda en el campo de texto?

9

Estoy ingresando caracteres en un campo de texto que es esencialmente una identificación de 5 números. Necesito incluir ceros iniciales en el valor, pero cada vez que ingreso o calculo el campo, los ceros iniciales se eliminan (aunque las propiedades del campo dicen que es un campo de texto de 5 caracteres).

¿Cómo fuerzo al campo a incluir ceros a la izquierda?

CJSF
fuente

Respuestas:

12

Python tiene una función integrada para los ceros a la izquierda. Use str.zfill()para agregar ceros a la izquierda en un campo de texto.

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

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

(ejemplo de https://stackoverflow.com/a/21620624/5754917 )

Entonces, en la calculadora de campo solo necesita especificar el nombre del campo con su ID y luego llenar con ceros

str(!myfield!).zfill(5)

ingrese la descripción de la imagen aquí

Y el resultado final:

ingrese la descripción de la imagen aquí

Recuerde cambiar la calculadora de campo a "Python Parser"

Midavalo
fuente
OK, esto parece muy simple. ¡Lo probaré! Gracias.
CJSF
¡Bien! Esto es exactamente lo que necesitaba y fue tan fácil que casi me da vergüenza. ¡Muchas gracias!
CJSF
3

Simplemente ponga su texto entre comillas. Comillas dobles si está en modo VB Script, y dobles o simples si está en modo Python.

Para explicar: cuando solo ingresa los números, le está dando a la Calculadora de campo un valor en forma de entero, que se convertirá en una cadena para ingresarlo en el campo de tipo de cadena. Para los enteros, los ceros iniciales no tienen valor ni significado, por lo que se omiten. Si lo pone entre comillas, en su lugar, le pasa una cadena, que ya es el tipo de datos correcto, por lo que se queda solo.

Esto también supone que este campo es realmente del tipo "Texto". Tal vez se estableció en Entero largo o corto, eso también causaría este comportamiento.

PhilippNagel
fuente
Gracias, supongo que esto también funcionará. Pero eventualmente necesitaré tomar el valor sin los ceros iniciales de parte de otro campo como parte de un proceso semiautomático más grande.
CJSF
Si puede editar su pregunta y agregar más detalles y el código completo que tiene actualmente, probablemente podríamos ayudarlo mejor. Parecía que estabas escribiendo valores manualmente en un montón de filas.
PhilippNagel
2

Puedes usar un bloque de código Python .

Agregue esta definición de función en el bloque de código:

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

Puedes usarlo como:

addZero(!Field!) # numeric field

o

addZero(123) # for example
aldo_tapia
fuente
Querrás hacer las definiciones <= para los límites superiores :)
MaryBeth
@ MaryBeth sí, es mi culpa. Editado
aldo_tapia
2

Como se menciona en las otras respuestas, debe asegurarse de que sus números se conviertan en cadenas.

Si pierde sus 0 o los tiene en un campo numérico, cree un ancho de columna de cadena 5, simplemente escriba el siguiente comando de Python:

str(!MYFIELD!).zfill(5)
Gisnside
fuente
Propiedad de @Midavalo! Fui demasiado lento: D
gisnside