Suite

Un problème avec arcpy.ValidateFieldName et les caractères unicode ?


J'ai des problèmes avec learcpy.ValidateFieldNamefonction en combinaison avec des caractères Unicode. Je veux ajouter un champ à un champ de forme. Le nom du champ ne doit pas être supérieur à 10 octets (ou du moins je pense), maisValiderNomChample coupe à 10 personnages. Étant donné qu'un caractère Unicode n'est pas nécessairement gros d'un octet, cela pose des problèmes.

Considérez ces trois exemples :

#Chemin vers un fichier de forme existant. file = r"C:pathfile.shp" #Cela fonctionne. Le nom est coupé après 10 caractères en "abcdefghij" name1 = arcpy.ValidateFieldName("abcdefghijklmnop", file) print name1 arcpy.AddField_management(in_table = file, field_name = name1, field_type = "TEXT") #Cela fonctionne. Le nom est inchangé (car il fait moins de 10 caractères) #ArcMap l'accepte car il ne dépasse pas 10 octets. name2 = arcpy.ValidateFieldName("äbcdefghi", fichier) print name2 arcpy.AddField_management(in_table = file, field_name = name2, field_type = "TEXT") #Cela ne fonctionne pas. Le nom est inchangé, puisqu'il fait exactement 10 caractères. #ArcMap ne l'accepte pas car il fait plus de 10 octets (?). name3 = arcpy.ValidateFieldName("äbcdefghij", fichier) print name3 arcpy.AddField_management(in_table = file, field_name = name3, field_type = "TEXT") #19

Le troisième exemple me donne cette erreur:

Erreur d'exécution Traceback (appel le plus récent en dernier) : File "", ligne 1, dans File "C:validate.py", ligne 19, dans arcpy.AddField_management(in_table = file, field_name = name3, field_type = "TEXT") Fichier "c:program files (x86)arcgisdesktop10.2arcpyarcpymanagement.py", ligne 3200, dans AddField raise e ExecuteError : ERROR 999999 : Erreur d'exécution de la fonction. Le type de champ n'est pas valide ou n'est pas pris en charge pour l'opération. Échec de l'exécution (AddField).

Curieusement, il ajoute toujours le champ mais avec le nom"äbcdefgh_1", même si la valeur denom3est"äbcdefghij".

La documentation a ceci à dire surValiderNomChamp:

Prend une chaîne (nom de champ) et un chemin d'espace de travail et renvoie un nom de champ valide en fonction des restrictions de nom dans la géodatabase en sortie.

Aurais-je raison de dire qu'il s'agit d'un bogue, puisque la valeur renvoyée dans le troisième exemple n'est en fait pas un nom de champ valide ?

Puis-je faire en sorte que cela fonctionne sans erreurs? Je dois être capable de prendre le nom d'un champ à partir de la saisie de l'utilisateur et de m'assurer d'une manière ou d'une autre qu'il se transforme en un nom valide.

Pourquoi le message d'erreur se plaint-il du type de champ, même si"TEXTE"devrait être un type de champ OK ?

ÉDITER: Cela semble être un bogue avec ArcMap. Si j'ajoute les champs d'ArcCatalog au lieu d'avec Python, j'obtiens un comportement similaire.


J'ai été en contact avec le support ESRI, et ils confirment qu'il s'agit bien d'un bug. Il est corrigé dans ArcGIS 10.3, donc la solution consiste à mettre à niveau.


Voir la vidéo: What should I do for my GIS project? Full Video (Octobre 2021).