Suite

Concaténer des champs avec des expressions d'étiquette à l'aide de Python

Concaténer des champs avec des expressions d'étiquette à l'aide de Python


J'essaie de combiner trois champs numériques pour l'étiquette d'une fonctionnalité. Je veux seulement étiqueter la fonctionnalité si elle est supérieure à 0. Les nombres étiquetés doivent être séparés par un tiret ("-"). C'est ce que j'ai essayé d'utiliser comme expression d'étiquette dans ArcMap 10.2 :

def FindLabel ( [a1], [a2], [a3] ): if ([a3]) == 0 et int([a2]) == 0 et ([a1]) == 0: label = " " elif ([a3]) == 0 et int([a2]) == 0 label = [a1] elif ([a3]) == 0 label = [a1] + "-" + [a2] else : label = [ a1] + "-" + [a2] + "-" + [a3] étiquette de retour

Cette fonction n'a pas besoin d'être trop complexe. Convertissez les éléments que vous voulez en une liste, puis joignez le résultat.

def FindLabel([A1], [A2], [A3]): args = [A1, A2, A3] items = [str(x) for x in args if bool(x) and int(x) > 0] if any(items): return '-'.join(items) else: return"

S'il s'agissait de Python approprié, vous utiliseriez normalement*argspour accepter un nombre quelconque d'arguments dans une liste.


Il manque des points-virgules et des problèmes avec les parenthèses. alors vous devez vous assurer que vous avez toujours une sortie de chaîne.

EDIT : désolé, j'ai donné une solution pour le calculateur de champ. Cette solution est mise à jour pour le moteur d'étiquetage.

def FindLabel ( [A1], [A2], [A3] ): a1=[A1] a2=[A2] a3=[A3] if ( (int(a1) == 0) et (int(a2) == 0) et (int(a3) == 0)): label = " " elif ( (int(a2) == 0) et (int(a3) == 0): label = str(a1) elif (int( a3) == 0) : label = a1 + "-" + a2 else : label = a1 + "-" + a2 + "-" + a3 retour label

notez que les tests suivants sont équivalents

entier(a1) == 0

et

a1="0"

pour tester si un champ est nul, vous pouvez utiliser

sinon a1 :