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

State Of The Map 2024

#1 Wed 15 June 2022 19:32

GlaDal
Participant assidu
Date d'inscription: 30 Aug 2013
Messages: 997

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

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)  wink

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

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

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

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é ! smile

Dernière modification par Sylvain M. (Wed 15 June 2022 21:21)


Sylvain M.

Hors ligne

 

#6 Thu 16 June 2022 08:57

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 567
Site web

Re: QGIS 3.22: Extraire du texte

Bonjour,

Comme Harrissou fait la grasse matinée smile 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: 983

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

Mais pour le cas présent, je trouve que les fonctions "array" sont puissantes aussi smile


Sylvain M.

Hors ligne

 

#8 Thu 16 June 2022 11:14

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

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 big_smile
Et content de voir que la communauté reste toujours aussi active et réactive...

Hors ligne

 

Pied de page des forums

Powered by FluxBB