Page 1 sur 1

[resolu] - Parse un string

Publié : lun. 11/mars/2013 14:52
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

Re: Parse un string

Publié : lun. 11/mars/2013 15:17
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 :)

Re: Parse un string

Publié : lun. 11/mars/2013 15:20
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.

Re: Parse un string

Publié : lun. 11/mars/2013 15:47
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

Re: Parse un string

Publié : lun. 11/mars/2013 15:48
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.

Re: Parse un string

Publié : lun. 11/mars/2013 16:22
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

Re: Parse un string

Publié : lun. 11/mars/2013 16:29
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)

Re: Parse un string

Publié : lun. 11/mars/2013 16:34
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

Re: Parse un string

Publié : lun. 11/mars/2013 16:39
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.

Re: Parse un string

Publié : lun. 11/mars/2013 16:40
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.

Re: Parse un string

Publié : lun. 11/mars/2013 17:56
par Backup
....