Pages: 1
- Sujet précédent - QGIS: Extraire les deux premiers mots d'une chaine de caracteres - Sujet suivant
#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"
ENDEt 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: 1034
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)
ENDExplication :
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: 4160
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: 1034
Re: QGIS: Extraire les deux premiers mots d'une chaine de caracteres
C'est plus beau et plus court avec les regexp !!! ![]()
Mais bon, mon CASE WHEN fonctionnait aussi ![]()
Sylvain M.
Hors ligne
Pages: 1
- Sujet précédent - QGIS: Extraire les deux premiers mots d'une chaine de caracteres - Sujet suivant


