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é ?

#1 Thu 19 August 2021 14:25

neskuik01
Participant assidu
Date d'inscription: 16 Feb 2015
Messages: 199

QGIS: Action sur table attributaire

Bonjour,

Chaque années nous ajoutons un champs qui contient une simple concaténation de l'ensemble des autres champs. je souhaiterais donc rajouter une action à cette table attributaire qui lorsqu'elle est exécuté :

DEBUT

variable
countnbchamp // index de nombre de champs

Si nombre de champs commencant par la lettre "X" est différent de countnbchamps alors:
- ajouter champs type string, avec pour nom (concatene("total_", tostring(countnbchamp-1))
- concatene tous les champs dont le nom commence par "X" et la conversion du dernier caractère en int répond VRAI au test isnumeric()

FIN

N'ayant pas encore exploiter les actions sur qgis j'avoue ne pas trop savoir si je dois faire ca avec du python (auxquel cas existe-t-il une doc ?) ou en pseudo sql  ?

Hors ligne

 

#2 Fri 27 August 2021 12:02

ericma62
Participant occasionnel
Date d'inscription: 1 Feb 2011
Messages: 26

Re: QGIS: Action sur table attributaire

Salut
tu peux essayer ce script à lancer dans la console python. Fait attention a l'indentation quand fera un copier coller.

CoucheATraiter=iface.activeLayer() #on prend la couche active
nbChamps=CoucheATraiter.fields().count()
print (nbChamps)
nbChampsX=0
for i in range(0,nbChamps): # on compte les champs qui commencent par X
    if CoucheATraiter.fields()[i].name()[0]=='X':
        nbChampsX+=1
print (nbChampsX)
if nbChampsX != nbChamps:
    nomChamp='total_'+ str(nbChamps-1)
    CoucheATraiter.dataProvider().addAttributes([QgsField(nomChamp,QVariant.String)]) # on ajoute un champ
    CoucheATraiter.updateFields()
    nouvNbChamps=CoucheATraiter.fields().count()
    for feature in CoucheATraiter.getFeatures(): # on balaye toutes les lignes de la table
        chaine=''
        for i in range(0,nbChamps):
            if CoucheATraiter.fields()[i].name()[0]=='X':
                chaine= chaine+ str(feature.attributes()[i]) # on fait la concatenation des champs qui commencent par X
        print (chaine)
        attrib={nouvNbChamps-1:chaine}
        CoucheATraiter.dataProvider().changeAttributeValues({feature.id():attrib}) # on met à jour
print ('fin')


Eric

Hors ligne

 

Pied de page des forums

Powered by FluxBB