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

Printemps des cartes 2024

#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: 380

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: 981

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: 981

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

 

Pied de page des forums

Powered by FluxBB