[resolu] Bug DroopyLibs => Between petit bug

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

[resolu] Bug DroopyLibs => Between petit bug

Message par Ar-S »

Salut,

Voilà, j'adore la droopylibs (bravo encore !) mais j'ai découvert un petit dysfonctionnement avec la fonction between.

rappel de son fonctionnement :

Between("Droopy", "Dr", "py")
prendra comme valeur oo

J'aimerai m'en servir pour l'extraction d'URL dans un codesource, mais des qu'on recherche le symbol " (donc le chr(34)) et bien le resultat est nul.

Voilà de quoi illustrer ce que je veux dire.

Code : Tout sélectionner

MessageRequester("Between","Resultat à afficher : caratères entre Dr et py dans le mot Droopy"+Chr(10)+"Resultat : "+ Between("Droopy", "Dr", "py"))
MessageRequester("Between2","Resultat à afficher : extraire l'url dans la source href="+Chr(34)+"http://www.purebasic.fr"+Chr(34) +Chr(10)+"Resultat : "+ Between("href="+Chr(34)+"http://www.purebasic.fr"+Chr(34), "href=http://purebasic.com"+Chr(34), Chr(34)))
Droopy si tu pouvais me dire ce qui chipote :)
Dernière modification par Ar-S le mar. 18/sept./2007 8:11, modifié 1 fois.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

La section 'Rapport de bugs' de ce forum est réservée aux bugs concernant le langage PureBasic.

Pour les bugs concernant les outils, les bibliothèques des utilisateurs, il est préférable de faire un post soit directement dans le post d'annonce de l'outil ou de la bibliothèque en question ou dans une autre section du forum, comme la section 'discussion générale' par exemple.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Ok désollé comptois, si un modo peut déplacer le topic dans discution générale
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Ar-S a écrit :Ok désollé comptois, si un modo peut déplacer le topic dans discution générale
fait ! :)
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: Bug DroopyLibs => Between petit bug

Message par Patrick88 »

Ar-S a écrit :des qu'on recherche le symbol " (donc le chr(34)) et bien le resultat est nul.
parce que les guillemets ne font pas partie de la chaine passée en paramétre...
ce sont juste des marqueurs de début et de fin ( en pascal ce sont des apostrophes ) le compilateur en a besoin pour retrouver les caractères qui composent la chaine dans la bouillie du code source.

pat
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

C'est pour cela que j'appele bien le chr(34) dans mon code, logiquement ça devrait fonctionner, vu qu'on peut trés bien faire apparaitre :

Bonjour comme "bonjour" en utilisant

Code : Tout sélectionner

mesagerequester("info",chr(34)+"bonjour"+chr(34)) 
C'est pour cela que je me dis que c'est une bug
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Message par case »

tu peux contourner le probleme en utilisant un systeme de code echapement
par exemple le caractere \ suivis par un nombre sur 3 octets refererais au code ascii du caractere voulu

par exemple bonjour "monsieur" comment allez vous

deviendrais bonjour \034monsieur\034 comment allez vous

bien sur cela implique de filtrer ce que tu vas afficher ensuite et de convertir dans le meme format ce que tu entre .

c'est le principe utilisé par les navigateurs avec le fameux %20 pour espace
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Essaye avec ça

Code : Tout sélectionner

;/ Author : Dr. Dri ( bug fixed )

Procedure.s Between(string.s, LString.s, RString.s) 
  Protected Between.s, lindex.l, RIndex.l 
  
  lindex = FindString(string, LString, 0) 
  RIndex = FindString(string, RString, lindex+Len(LString)) 
  
  If lindex And RIndex 
    lindex  + Len(LString)
    Between = Mid(string, lindex, RIndex-lindex) 
  EndIf 
  
  ProcedureReturn Between 
EndProcedure 


MessageRequester("Between","Resultat à afficher : caratères entre Dr et py dans le mot Droopy"+Chr(10)+"Resultat : "+ Between("Droopy", "Dr", "py")) 
MessageRequester("Between2","Resultat à afficher : extraire l'url dans la source href="+Chr(34)+"http://www.purebasic.fr"+Chr(34) +Chr(10)+"Resultat : "+ Between("href="+Chr(34)+"http://www.purebasic.fr"+Chr(34),"href="+Chr(34),Chr(34)))
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Superbe Droopy ça marche au poil, il a juste fallu que je donne un nouveau nom à la procédure vu que between est utilisée en externe (ce que me dit PB).
En tout cas, ce bug fixed va sûrement me permettre de bien avancer dans la création de mon petit navigateur web.

Alors grosse grosse papouille à toi !

:P
Répondre