#1 Thu 02 February 2023 17:30
- Barthouille
- Juste Inscrit !
- Date d'inscription: 12 Apr 2021
- Messages: 5
QGIS: Position de caractere
Bonjour,
J'aurai besoin d'obtenir la position 2ème voire Xième occurrence d'un caractère dans une chaine.
La fonction strpos permet d'obtenir la première occurrence, exemple : strpos('A,B,C' , ',') -> 2
mais pour la 2ème ou l'Xième je sèche...
Sauriez vous m'aider SVP ?
Hors ligne
#2 Thu 02 February 2023 20:41
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 414
Re: QGIS: Position de caractere
Bonjour.
Peux-tu nous dire dans quel but tu cherches à faire ça ?
J'ai l'impression que les fonctions array pourraient t'être utiles. https://docs.qgis.org/3.22/en/docs/user … -functions
Notamment array_to_string combiné à array_get.
Hors ligne
#3 Thu 02 February 2023 20:50
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 992
Re: QGIS: Position de caractere
Salut Barthouille,
C'était pas simple pour moi, mais j'y suis parvenu avec cette formule :
Code:
strpos("ton_champ",string_to_array("ton_champ",'separateur')[N])-1
remplacer "N" par 2 pour la 2e occurence, 3 pour la 3e, ...
Par exemple, pour la 2e virgule dans ton cas :
Code:
strpos('A,B,C',string_to_array('A,B,C',',')[2])-1
Regarde la doc de string_to_array() pour comprendre le principe :
https://docs.qgis.org/3.22/en/docs/user … g-to-array
[edit]
Ah, mince : je me rends compte que ma fonction ne marche que si chaque "array" (texte entre les délimiteurs) est différent... Si un array est répété plusieurs fois, ça donnera la position de la première occurrence...
A améliorer donc !
Dernière modification par Sylvain M. (Thu 02 February 2023 20:55)
Sylvain M.
Hors ligne
#4 Fri 03 February 2023 12:45
- Barthouille
- Juste Inscrit !
- Date d'inscription: 12 Apr 2021
- Messages: 5
Re: QGIS: Position de caractere
Bonjour,
Merci pour vos réponses !
Les fonctions array que je ne connaissait pas semblent bien prometteuses pour mon soucis et il faut que je travaille ça.
p.jeremie, je réalise un atlas d'espèce sur une commune. Certaines ont plusieurs synonymes (ex : écrevisse à pattes blanches, écrevisses à pied blanc, écrevisse pallipède). J'aimerai n'en faire apparaître que 2 ou 3 max par espèce (question de lisibilité). Le but était donc de tronquer le champs "nom" à la 2ème ou 3ème virgule.
Sylvain M., ton expression fonctionne bien. Dans mon cas la répétition d'array ne se pose pas car le champs "nom" est propre à chaque entité (espèce). Par contre l'expression retourne NULL pour les espèces n'ayant pas de synonyme (un seul nom, pas de virgule).
Il faut donc que je travaille ce fameux type array et les fonctions associées (qui me serviront surement aussi pour d'autres soucis que je rencontrais ...)
Encore merci pour vos réponses !
Hors ligne
#5 Fri 03 February 2023 15:31
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 992
Re: QGIS: Position de caractere
Salut Barthouille,
Dans ton cas, pour récupérer les 2 premiers noms d'une espèce, voici une formule qui fonctionne bien :
Code:
array_to_string(array_filter(string_to_array("nom_taxon",','),@element,2),', ')
Dernière modification par Sylvain M. (Fri 03 February 2023 15:32)
Sylvain M.
Hors ligne