Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 07 May 2008 14:57

Loo
Juste Inscrit !
Date d'inscription: 17 Apr 2008
Messages: 8

[ArcGIS 9.x] Find/replace dans une table attributaire, script python

Salut à tou(te)s

J'utilise un script trouvé sur le site officiel d'esri qui me permets de remplacer à la chaîne et automatiquement des valeurs dans une table attributaire, mais cela ne fonctionne que pour les champs de type string.

Auriez-vous une idée sur comment modifier tout ça pour l'utiliser dans les champs double, short, long, etc... ??

Code:

#Parameters:    
#Display Name                       #Data Type      #Type            #Direction      Multi Value     Dependency
#   Select Feature      argv [1]    Feature Layer   Required        Input           No
#   Select the Field    argv [2]    Field           Required        Input           No              Select_Feature
#   Find What           argv [3]    String          Required        Input           No
#   Replace With        argv [4]    String          Required        Input           No
#   Expression          argv [5]    SQL Expression  Optional        Input           No
#
# Import System Modules
#
import sys, string, os, win32com.client

# Create the Geoprocessor Object
#
gp = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1")

# Create Variables
#
Layer1 = sys.argv[1]
theField = sys.argv[2]
ToReplace = sys.argv[3]
ReplaceWith = sys.argv[4]
theExpress = sys.argv[5]

gp.AddMessage("Input layer: " + Layer1)
gp.AddMessage("Input field: " + theField)
gp.AddMessage("Replace Value: " + ToReplace)
gp.AddMessage("New Value: " + ReplaceWith)
    
#Replace word(s) on only entities that result in SQL Expression
#
if theExpress != "#":

    rows = gp.UpdateCursor (Layer1,theExpress)
    row = rows.Next()
                
    gp.AddMessage("Expression used to select rows: " + theExpress)
                        
    while row:
        row.SetValue(theField,
                     row.GetValue(theField).replace(ToReplace,ReplaceWith))
        rows.UpdateRow(row)
        row = rows.Next()
                    
#Replace word(s) on all entities if no entities are selected in the SQL Expression
#
else:
    
    rows = gp.UpdateCursor (Layer1,"")
    row = rows.Next()
    
    while row:
        row.SetValue(theField,
                     row.GetValue(theField).replace(ToReplace,ReplaceWith))
        rows.UpdateRow(row)
        row = rows.Next()

Hors ligne

 

#2 Wed 07 May 2008 15:17

Tnarbiv
Participant assidu
Lieu: Véretz
Date d'inscription: 5 Sep 2005
Messages: 392

Re: [ArcGIS 9.x] Find/replace dans une table attributaire, script python

Et si essaies ça

Code:

#Parameters:    
#Display Name                       #Data Type      #Type            #Direction      Multi Value     Dependency
#   Select Feature      argv [1]    Feature Layer   Required        Input           No
#   Select the Field    argv [2]    Field           Required        Input           No              Select_Feature
#   Find What           argv [3]    String          Required        Input           No
#   Replace With        argv [4]    String          Required        Input           No
#   Expression          argv [5]    SQL Expression  Optional        Input           No
#
# Import System Modules
#

#Pour 9.0 et 9.1
import sys, string, os, win32com.client

#Pour 9.2
import sys, string, os, arcgisscripting

#Pour 9.0 et 9.1
# Create the Geoprocessor Object
#
gp = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1")

#Pour 9.2
gp = arcgiscripting.create()

# Create Variables
#
Layer1 = sys.argv[1]
theField = sys.argv[2]
ToReplace = sys.argv[3]
ReplaceWith = sys.argv[4]
theExpress = sys.argv[5]

gp.AddMessage("Input layer: " + Layer1)
gp.AddMessage("Input field: " + theField)
gp.AddMessage("Replace Value: " + str(ToReplace))
gp.AddMessage("New Value: " + str(ReplaceWith))
    
#Replace word(s) on only entities that result in SQL Expression
#
if str(theExpress) != "#":

    rows = gp.UpdateCursor (Layer1,str(theExpress))
    row = rows.Next()
                
    gp.AddMessage("Expression used to select rows: " + str(theExpress))
                        
    while row:
        row.SetValue(theField,row.GetValue(theField).replace(str(ToReplace),str(ReplaceWith)))
        rows.UpdateRow(row)
        row = rows.Next()
                    
#Replace word(s) on all entities if no entities are selected in the SQL Expression
#
else:
    
    rows = gp.UpdateCursor (Layer1,"")
    row = rows.Next()
    
    while row:
        row.SetValue(theField,row.GetValue(theField).replace(str(ToReplace),str(ReplaceWith)))
        rows.UpdateRow(row)
        row = rows.Next()

Est ce que le fait de rajouter d'utilise str() devant ToReplace, ReplaceWith et theExpress ça change quelque chose ?

Dernière modification par Tnarbiv (Wed 07 May 2008 15:21)


Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.

Hors ligne

 

#3 Wed 07 May 2008 15:52

Loo
Juste Inscrit !
Date d'inscription: 17 Apr 2008
Messages: 8

Re: [ArcGIS 9.x] Find/replace dans une table attributaire, script python

Hum, je vois pas de différence... sad

Je pense qu'il me faut changer les type de données dans les paramètre, il ne doit pas être possible de duper facilement arcMap

Bien essayé wink

Hors ligne

 

Pied de page des forums

Powered by FluxBB