#1 Mon 21 April 2008 11:41
- Loo
- Juste Inscrit !
- Date d'inscription: 17 Apr 2008
- Messages: 8
[ArcGIS 9.1] Script réarrangement de champs
Salut Tutti!
Voici un code en python qui fonctionne PRESQUE !
J'arrive pas à trouver le bug, alors toutes suggestions bienvenues....
Mercimerci
Code:
import os,string,sys import win32com.client gp = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1") FC_In = sys.argv[1] NewOrder = "ID_GA25_CH;CODE_ZV;DESCRIPT;SYMBOL;AZIMUT;DIP;ORIENT;SPEC_VAL;SPEC_DESCR;REM" FC_Out_WS = sys.argv[2] FC_Out_Name = sys.argv[3] strFields = gp.listfields(FC_In) strNewOrder = NewOrder Layers = [""] # Get Field Collection into List Fields = gp.listfields(FC_In) NewOrder = string.split(strNewOrder,";") gp.AddMessage("C'est bien patri") x=0 #NewOrder enumerator y=0 #Layers enumerator (first) # Cycles through the input feature class creating field collections while x<len(NewOrder): Fields.Reset() Field = Fields.Next() while Field: FieldName = str(Field.name) if x<len(NewOrder) and NewOrder[x].lower() == FieldName.lower(): Layers[y] = Layers[y] + FieldName + " " + NewOrder[x] + " VISIBLE" x=x+1 else: Layers[y] = Layers[y] + FieldName + " " + FieldName + " HIDDEN" Field = Fields.Next() if Field: Layers[y] = Layers[y] + "; " FieldName = str(Field.name) else: Layers.append("") y=y+1 Layers[y]="" # Use Field collections to create Layers with proper order until all fields have been used z=0 #Layers enumerator (second) LayerList = "" for Layer in Layers: if Layer <> "": if LayerList <> "": LayerList=LayerList + ";" LayerList=LayerList + "Layer" + str(z) gp.MakeFeatureLayer(FC_In, "Layer" + str(z),"#","#",Layer) gp.addmessage("Mouais") z=z+1 #Collect Info about Input Feature Class dsc = gp.describe(FC_In) fc_in_stype = dsc.shapetype fc_in_sr = dsc.spatialreference # Create new empty Feature class with desired fields try: gp.CreateFeatureClass(FC_Out_WS,FC_Out_Name,fc_in_stype,LayerList,"#","#",fc_in_sr) gp.addmessage("Presque") except: gp.addmessage("Oups") # Append Records to new feature class gp.append_management(FC_In, FC_Out_WS + "\\" + FC_Out_Name) gp.addmessage("TipTop") del gp
Et le message d'erreur...
Code:
Executing: TestOrder (...) Start Time: (...) Running script TestOrder... C'est bien patri Mouais Mouais Mouais Mouais Oups Error in script TestOrder. Error in executing: cmd.exe /C (...) Failed to execute (TestOrder). End Time: (...) (Elapsed Time: 9.00 seconds)
Hors ligne
#2 Mon 21 April 2008 16:18
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: [ArcGIS 9.1] Script réarrangement de champs
tu es en quelle version d'arcgis ?
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#3 Mon 21 April 2008 17:01
- Loo
- Juste Inscrit !
- Date d'inscription: 17 Apr 2008
- Messages: 8
Re: [ArcGIS 9.1] Script réarrangement de champs
9.1
J'ai avancé un peu...
Maintenant, j'obtiens le nouveau shp, mais avec la table attributaire vide, et je ne sais vraiment pas quelle commande utiliser pour finaliser le tout.
Code:
import os,string,sys import win32com.client gp = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1") FC_In = sys.argv[1] NewOrder = "ID_GA25_CH;CODE_ZV;DESCRIPT;SYMBOL;AZIMUT;DIP;ORIENT;SPEC_VAL;SPEC_DESCR;REM" FC_Out_WS = sys.argv[2] FC_Out_Name = sys.argv[3] strFields = gp.listfields(FC_In) strNewOrder = NewOrder Layers = [""] # Get Field Collection into List Fields = gp.listfields(FC_In) NewOrder = string.split(strNewOrder,";") gp.AddMessage("C'est bien patri") x=0 #NewOrder enumerator y=0 #Layers enumerator (first) # Cycles through the input feature class creating field collections while x<len(NewOrder): Fields.Reset() Field = Fields.Next() while Field: FieldName = str(Field.name) if x<len(NewOrder) and NewOrder[x].lower() == FieldName.lower(): Layers[y] = Layers[y] + FieldName + " " + NewOrder[x] + " VISIBLE" x=x+1 else: Layers[y] = Layers[y] + FieldName + " " + FieldName + " HIDDEN" Field = Fields.Next() if Field: Layers[y] = Layers[y] + "; " FieldName = str(Field.name) else: Layers.append("") y=y+1 Layers[y]="" # Use Field collections to create Layers with proper order until all fields have been used z=0 #Layers enumerator (second) LayerList = "" for Layer in Layers: if Layer <> "": if LayerList <> "": LayerList=LayerList + ";" LayerList=LayerList + "Layer" + str(z) gp.MakeFeatureLayer(FC_In, "Layer" + str(z),"#","#",Layer) gp.addmessage(gp.getmessages()+ "\n") gp.addmessage("Mouais") z=z+1 #Collect Info about Input Feature Class dsc = gp.describe(FC_In) fc_in_stype = dsc.shapetype fc_in_sr = dsc.spatialreference # Create new empty Feature class with desired fields try: gp.CreateFeatureClass(FC_Out_WS,FC_Out_Name,fc_in_stype,LayerList,"#","#",fc_in_sr) gp.addmessage(gp.getmessages()+ "\n") gp.addmessage("Presque") except: gp.addmessage(gp.getmessages()+ "\n") gp.addmessage("Oups") # ?????????? del gp
Hors ligne
#4 Tue 22 April 2008 15:20
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: [ArcGIS 9.1] Script réarrangement de champs
peux tu m'envoyer ta donnée d'origine pour que je fasse des tests
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne