Obtenir ArcGIS pour inclure des zéros non significatifs dans le champ de texte?

9

J'entre des caractères dans un champ de texte qui est essentiellement un identifiant à 5 chiffres. J'ai besoin que les zéros non significatifs soient inclus dans la valeur, mais chaque fois que j'entre ou calcule le champ, les zéros non significatifs sont supprimés (même si les propriétés du champ indiquent qu'il s'agit d'un champ texte à 5 caractères).

Comment forcer le champ à inclure des zéros non significatifs?

CJSF
la source

Réponses:

12

Python a un intégré pour les zéros non significatifs. Utilisez str.zfill()pour ajouter des zéros non significatifs dans un champ de texte.

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

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

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

Donc, dans la calculatrice de champ, il vous suffit de spécifier le nom du champ avec votre ID, puis de remplir avec des zéros

str(!myfield!).zfill(5)

entrez la description de l'image ici

Et le résultat final:

entrez la description de l'image ici

N'oubliez pas de basculer la calculatrice de champ sur "Analyseur Python"

Midavalo
la source
OK, cela semble très simple. Je vais essayer! Merci.
CJSF
Bien! C'est exactement ce dont j'avais besoin et c'était si facile, je suis presque gêné! Merci beaucoup!
CJSF
3

Mettez simplement votre texte entre guillemets. Double guillemets si vous êtes en mode Script VB et double ou simple si en mode Python.

Pour expliquer: Lorsque vous entrez simplement les nombres, vous donnez à Field Calculator une valeur sous forme d'entier, qu'il convertira en une chaîne pour vous afin de la saisir dans le champ de type de chaîne. Pour les entiers, les zéros non significatifs n'ont aucune valeur et aucune signification, ils sont donc omis. Si vous le mettez entre guillemets, vous lui passez plutôt une chaîne, qui est déjà le type de données correct, donc il reste seul.

Cela suppose également que ce champ est en fait de type "Texte". Peut-être qu'il était défini sur Entier long ou court, cela provoquerait également ce comportement.

PhilippNagel
la source
Merci, je suppose que cela fonctionnera aussi. Mais je devrai éventuellement saisir la valeur sans les zéros de tête d'une partie d'un autre champ dans le cadre d'un processus semi-automatique plus important.
CJSF
Si vous pouvez modifier votre question et ajouter plus de détails et le code complet que vous avez actuellement, nous pourrions probablement vous aider mieux. Il semblait que vous écriviez simplement des valeurs manuellement sur un tas de lignes.
PhilippNagel
2

Vous pouvez utiliser un bloc de code Python .

Ajoutez cette définition de fonction dans le bloc de code:

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

Vous pouvez l'utiliser comme:

addZero(!Field!) # numeric field

ou

addZero(123) # for example
aldo_tapia
la source
Vous voudrez faire les définitions <= pour les limites supérieures :)
MaryBeth
@MaryBeth oui, ma faute. Modifié
aldo_tapia
2

Comme mentionné dans les autres réponses, vous devez vous assurer que vos numéros sont convertis en chaînes.

Si vous perdez vos 0 ou les avez dans un champ numérique, créez une chaîne de largeur 5, tapez simplement la commande Python suivante:

str(!MYFIELD!).zfill(5)
gisnside
la source
Propriété de @Midavalo! J'étais trop lent: D
gisnside