#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