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" 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 !!!
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