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 Fri 11 March 2022 17:47

Paul Khadri
Juste Inscrit !
Date d'inscription: 7 Mar 2022
Messages: 2

QGIS: Extraire les deux premiers mots d'une chaine de caracteres

Bonjour,

J'ai un champ appelé "Nom_Scient" qui contient des noms latins d'espèces (constitués de 2 mots).  Parmi les valeurs, certains noms d'espèces sont suivis du nom de la personne qui les a nommées et la date. J'aimerais conserver uniquement le nom d'espèce (c'est-à-dire les 2 premiers mots).
Parfois ce nom est entre parenthèses, exemple :

Accipiter nisus (Linnaeus, 1758)


Donc je peux facilement l'éliminer :

Code:

CASE
WHEN  "Nom_Scient" LIKE '%(%)'
THEN left( "Nom_Scient" ,strpos( "Nom_Scient" , '(')-2)
ELSE  "Nom_Scient" 
END

Et j'obtiens donc ça en sortie :

Accipiter nisus


Cependant des fois il n'est pas entre parenthèses, exemples :

Sylvia communis Latham, 1787
Turdus philomelos C. L. Brehm, 1831


Dans ces cas-là, je n'y arrive pas. J'aimerais donc savoir s'il y existe une solution sur Qgis.

Merci d'avance pour vos réponses.

Hors ligne

 

#2 Fri 11 March 2022 18:16

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

Re: QGIS: Extraire les deux premiers mots d'une chaine de caracteres

Ça peut marcher comme ça :

Code:

CASE WHEN length("Nom_Scient")-length(replace("Nom_Scient", ' ', '')) = 1
THEN "Nom_Scient"
ELSE substr("Nom_Scient",1, strpos("Nom_Scient" ,' ') + strpos(substr("Nom_Scient",1+strpos("Nom_Scient" ,' ')),' ') -1)
END

Explication :
Je compte d'abord le nombre d'espaces dans la chaine de caractères = différence entre "longueur du champ" et "longueur du champ dans lequel on a remplacé les espaces par rien"
=> Si 1 seul espace, je prend l'ensemble de la chaine (le genre et l'espèce)
=> Si plus d'un espace, je trouve la position du 2e espace, et je prend le nombre de caractère avant cette position.

Dernière modification par Sylvain M. (Fri 11 March 2022 18:18)


Sylvain M.

Hors ligne

 

#3 Fri 11 March 2022 18:19

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3939

Re: QGIS: Extraire les deux premiers mots d'une chaine de caracteres

Bonjour,
regexp_substr devrait aider à faire cela sans les case bidules. Je laisse les puristes de l'expression régulière voir si on peut écrire plus proprement mais bon...

Code:

 regexp_substr( "Nom_Scient", '(\\w+ \\w+)') -- où \\w+ représente un mot

Edit: Il me semble que la parenthèse est même inutile, ici

Dernière modification par SANTANNA (Fri 11 March 2022 18:22)

Hors ligne

 

#4 Fri 11 March 2022 19:02

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

Re: QGIS: Extraire les deux premiers mots d'une chaine de caracteres

C'est plus beau et plus court avec les regexp !!! smile
Mais bon, mon CASE WHEN fonctionnait aussi tongue


Sylvain M.

Hors ligne

 

Pied de page des forums

Powered by FluxBB