[resolu] - Parse un string

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

[resolu] - Parse un string

Message par doudouvs »

J'ai un string et je souhaite récupérer uniquement ce dont j'ai besoin entre les balises.

exemple :

string = <blop>texte</blop>...

Si vous pouvez éclairer ma lanterne
Dernière modification par doudouvs le lun. 11/mars/2013 18:28, modifié 2 fois.
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Parse un string

Message par falsam »

Procédure de G-Rom avec utilisation des RegEx

Code : Tout sélectionner

Procedure.s ExtractFromTag(Text.s, open.s, close.s)
  PosA = FindString(Text,open,1) + Len(open)
  PosB = FindString(Text,close,2)
  Out$ = Mid(Text,PosA,PosB-PosA)
  ProcedureReturn Out$
EndProcedure

string$ = "<blop>Glop</blop> et <blop>Pas Glop</blop>"

;-Extraction
exp = CreateRegularExpression(#PB_Any, "<blop>([^<]*)</blop>")
Dim Strong$(0)
StrongFound = ExtractRegularExpression(exp,string$, Strong$())
FreeRegularExpression(exp)

;Resultat
For k = 0 To StrongFound-1
   Debug ExtractFromTag(Strong$(k),"<blop>","</blop>")
Next
Il me semble que j'avais autre chose. Si je retrouve je poste :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Azur
Messages : 40
Inscription : ven. 22/mai/2009 23:58

Re: Parse un string

Message par Azur »

Salut, je sais pas si tu as beaucoup d'expérience en prog mais voici une solution universelle utilisée quasiment systématiquement de nos jours.

http://www.purebasic.com/documentation/ ... index.html

Je te cache pas que si tu en as jamais entendu parlé, les premières dix minutes ça va piquer un peu, mais il y a moyen de faire rapidement de petits tests. En quelques heures ça devrait être géré, ensuite libre à toi de d'aller concurrencer google sur son propre terrain.
Tiens-nous au courant.
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: Parse un string

Message par doudouvs »

ohh des des expressions régulières cool

Je suis conquis, je maîtrise quelques languages de programmation, les PCRE ne me pose pas de problème.
Concurrencer GG non je pense pas. Par contre j'ai déjà fait un moteur de recherche un peux plus rapide...

En faite je suis entrain de faire un soft de sauvegarde distant, je test toutes les étapes avant de coder le soft final.

Merci à vous deux
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Parse un string

Message par falsam »

Toujours avec des expressions régulière

Code : Tout sélectionner

String$ = "<plop>texte</plop>"
exp=CreateRegularExpression(#PB_Any,"(<[[:alnum:]]*>)|(</[[:alnum:]]*>)")
Debug ReplaceRegularExpression(exp, String$,"")
FreeRegularExpression(exp)
On utilise la classe alphanumérique. C'est pas mal mais les balise foireuses passe aussi.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: Parse un string

Message par doudouvs »

Code : Tout sélectionner

exp = CreateRegularExpression(#PB_Any, "<blop>(.*)</blop>")
me suffira il n'y que des balises uniques sans doublon, vu que c'est moi qui fait le serveur distant
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Parse un string

Message par falsam »

doudouvs a écrit :exp = CreateRegularExpression(#PB_Any, "<blop>(.*)</blop>")
Elle fonctionne ta regex ?

En reprenant ma précédente solution (Pas très juste mais suffisant)

Code : Tout sélectionner

n$ = "<blop>mon texte</blop>"
exp=CreateRegularExpression(#PB_Any,"<blop>|</blop>")
Debug ReplaceRegularExpression(exp,n$,"")
FreeRegularExpression(exp)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: Parse un string

Message par doudouvs »

Oui (.*) veux dire tout

Code : Tout sélectionner

string$ = "<blop>Glop</blop>"

exp = CreateRegularExpression(#PB_Any, "<blop>(.*)</blop>")
Dim Strong$(0)
StrongFound = ExtractRegularExpression(exp,string$, Strong$())
FreeRegularExpression(exp)
 
For k = 0 To StrongFound-1
   Debug ExtractFromTag(Strong$(k),"<blop>","</blop>")
Next
Dans Debug j'ai bien Glop
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Parse un string

Message par falsam »

doudouvs a écrit :Dans Debug j'ai bien Glop
Je n'ai pas compris tout de suite que tu avais repris la première solution basée sur le code de G-Rom.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Parse un string

Message par Ar-S »

Salut,
Au cas ou tu ais loupé le lien, toujours bon à consulter
http://www.purebasic.fr/french/viewtopi ... 21&t=11395

Quelques exemples de regex avec PB.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Parse un string

Message par Backup »

....
Répondre