#1 Wed 15 June 2022 19:32
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1087
QGIS 3.22: Extraire du texte
Bonjour à tous,
Je cherche à extraire du texte qui se situe dans un champ "Texte". Par exemple, dans la chaine de caractères suivant :
Code:
Fe : 702.55-*-Tampon : 705.22-*-autre texte
J'aimerais extraire :
- dans le champ "Fe", la valeur 702.55
- dans le champ "Tampon", la valeur 705,22
- Je ne m'occupe pas du reste du texte ('autre texte')
En sachant que, dans mon champs d'origine "Texte", mes infos peuvent être mélangées. Par exemple :
Code:
Tampon : 705.22-*-Fe : 702.55 -*-autre texte
ou
Code:
Fe : 702.55 -*-autre texte-*-Tampon : 705.22
Il faudrait pour cela évaluer la présence de la portion de texte 'Fe :' ou 'Tampon : ' pour ensuite extraire la valeur qui est à droite de mes ':' de cette partie de bloc qui se situe avant la chaine de caractère '-*-' . C'est pas très clair cette dernière explication, c'est certainement pour ça que je sèche..
D'avance merci pour votre aide !
Qui sera plus rapide à répondre que SANTANNA ?
Hors ligne
#2 Wed 15 June 2022 21:00
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: QGIS 3.22: Extraire du texte
Voici une proposition, pour tenter de devancer Santanna et les excellentes "Expression Régulières" que je ne maitrise pas.
Ça fonctionne selon moi, mais il y aurait certainement bien plus court avec les expressions régulières :
Exemple avec la valeur "Fe : "
Code:
replace(array_to_string(array_filter(string_to_array("texte",'-*-'),@element LIKE 'Fe : %')),'Fe : ','')
(à adapter pour les autres valeurs)
L'idée :
- convertir en "array" : tableau de données, séparées par le délimiteur '-*-'
- filtrer ce tableau par la variable cherchée (@element LIKE 'Fe : %' )
- convertir cet élement du tableau en texte
- extraire de ce texte le nom de la variable, en la remplaçant par rien : replace(cellule, 'Fe : ', '')
Du coup, ça s'adapte facilement pour les autres variables.
Ça marche ? J'ai battu Santanna en rapidité ? (certainement pas en concision du code)
Dernière modification par Sylvain M. (Wed 15 June 2022 21:01)
Sylvain M.
Hors ligne
#3 Wed 15 June 2022 21:07
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1087
Re: QGIS 3.22: Extraire du texte
héhé !!! J'adore ces petits défis ! Bravo Sylvain M. ! Je teste de suite ! ;-)
Hors ligne
#4 Wed 15 June 2022 21:14
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1087
Re: QGIS 3.22: Extraire du texte
Oulala, ça fonctionne ! Je n'aurais jamais trouvé... Merci beaucoup pour cette réponse en 1h28 !
Hors ligne
#5 Wed 15 June 2022 21:20
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: QGIS 3.22: Extraire du texte
Merci beaucoup pour cette réponse en 1h28 !
Je tiens quand même à préciser que je n'ai découvert le sujet qu'en début de soirée : je n'ai pas chronométré, mais j'ai dû me creuser les méninges 15 min maxi...
15 minutes, quand même ! En fait, j'avais fait fausse route au début avec instr() et strpos(), mais ça devenait vite compliqué du fait de l'ordre variable des données à extraire du champ texte. Et là, m'est revenue la notion d'array appropriée avec Python, et du coup, ça a marché !
Dernière modification par Sylvain M. (Wed 15 June 2022 21:21)
Sylvain M.
Hors ligne
#6 Thu 16 June 2022 08:57
Re: QGIS 3.22: Extraire du texte
Bonjour,
Comme Harrissou fait la grasse matinée voici la version avec les expressions rationnelles :
pour la cote tampon :
Code:
regexp_substr(regexp_substr("texte", 'Tampon : [0-9]+.[0-9]*'), '[0-9]+.[0-9]*')
pour la cote fil d'eau :
Code:
regexp_substr(regexp_substr("texte", 'Fe : [0-9]+.[0-9]*'), '[0-9]+.[0-9]*')
Je vous encourage vraiment à vous plonger dans les expressions rationnelles, vous ne pourrez rapidement plus vous en passer ;-)
Dernière modification par jmarsac (Thu 16 June 2022 08:57)
Jean-Marie
Azimut
Hors ligne
#7 Thu 16 June 2022 10:15
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: QGIS 3.22: Extraire du texte
Je vous encourage vraiment à vous plonger dans les expressions rationnelles, vous ne pourrez rapidement plus vous en passer ;-)
je l'ai intégré dans ma "to do list"
Mais pour le cas présent, je trouve que les fonctions "array" sont puissantes aussi
Sylvain M.
Hors ligne
#8 Thu 16 June 2022 11:14
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3940
Re: QGIS 3.22: Extraire du texte
Hello,
Comme Harrissou fait la grasse matinée :smile:
Une bonne grasse matinée d'une semaine, ça fait du bien, tu ne sais à quel point
Et content de voir que la communauté reste toujours aussi active et réactive...
Hors ligne