Utilisation de ReplaceString BUG ou pas BUG ??

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Utilisation de ReplaceString BUG ou pas BUG ??

Message par MLD »

Bonjour a tous

Un petit code vaut mieux qu'une grande explication :lol:

Code : Tout sélectionner

Procedure.s verifdat(cdat$)
If Len(cdat$) <> 10 
 Debug "erreur"
Else
 ;If Mid(cdat$,3,1) <> "-" :a$ = Mid(cdat$,3,1): ReplaceString(cdat$,a$, "-", #PB_String_InPlace, 1):EndIf 
 If Mid(cdat$,3,1) <> "-" :ReplaceString(cdat$,Mid(cdat$,3,1), "-", #PB_String_InPlace, 1):EndIf 
 :Pourquoi cette ligne ne fonctionne pas,alors que celle du dessus fonctionne parfaitement? l'extraction d'une ou plusieurs lettres sont elles impossible dans ReplaceString?  EndIf 
Debug cdat$
EndProcedure

verifdat("12/12/2012")

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

Re: Utilisation de ReplaceString BUG ou pas BUG ??

Message par Ar-S »

Tes 2 méthodes fonctionnent pourtant bien.

Code : Tout sélectionner

Procedure.s verifdat(cdat$)
  If Len(cdat$) <> 10 
    Debug "erreur date"
  Else
    
    cdat2$ = cdat$
    
    If Mid(cdat$,3,1) <> "-" 
      
      a$ = Mid(cdat$,3,1)
      Debug "a$ = " + a$
      Debug "Mid(cdat2$,3,1 : ) = " + Mid(cdat2$,3,1)
      ReplaceString(cdat2$,Mid(cdat2$,3,1), "-", #PB_String_InPlace, 1)
      ReplaceString(cdat$,a$, "-", #PB_String_InPlace, 1)
    EndIf 
    
  EndIf
  
  
  Debug "Methode 1 :" + cdat$
  Debug "Methode 2 :" + cdat2$
EndProcedure

verifdat("12/12/2012")

End

~~~~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
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Utilisation de ReplaceString BUG ou pas BUG ??

Message par MLD »

Salut Ar-S

Au passage Bon anniversaire.

Bien, j'ai fait quelques tests. En fait la deuxieme ligne déclenche mon AV(BitDefender), qui lui même bloque le compil. Pourquoi??? :twisted: :roll:
Merci pour le test :lol:
Bonne journée
Michel
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Utilisation de ReplaceString BUG ou pas BUG ??

Message par Ar-S »

MLD a écrit : Au passage Bon anniversaire.
Merci :D
MLD a écrit : Bien, j'ai fait quelques tests. En fait la deuxieme ligne déclenche mon AV(BitDefender), qui lui même bloque le compil. Pourquoi???
Parce que c'est de la daube ? :mrgreen:
Le pourquoi j'en sais rien, c'est peut-être une analyse heuristique à la con qu'il faudrait que tu bloques.
Au pire, faudrait mettre ton dossier de PB dans la liste blanche de ton AV.
~~~~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
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Utilisation de ReplaceString BUG ou pas BUG ??

Message par Ar-S »

L'utilisation des regex peut être sympa aussi pour ce genre d'opération. De plus il te permet d'extraire une date dans un texte complexe.

Code : Tout sélectionner

;Extracteur de date
;utilisant les expressions régulières
; Par Ar-S / Nov 2011 - P.B 4.60

; Extrait date sous forme jj-mm-aaaa d'après une date dans sous la forme jj/mm/aaaa dans un string

Global t$="nous sommes le 16/11/2011 et on se caille les miches" ; le string contenant la date
Global NbrTrouve
Global Dim result$(0) 


Procedure.s VerifDat(t$)
  
  expr$ = "([0-9]{2}/){2}[0-9]{4}"
  CreateRegularExpression(0,expr$)
  NbrTrouve = ExtractRegularExpression(0, t$ , result$()) ;Extrait les résultat dans result()
  
  If NbrTrouve>0
    
    For k = 0 To NbrTrouve-1
      LaDate$ = result$(k)+Chr(10)+Chr(13)
      LaDate$ = ReplaceString(LaDate$,"/","-")
    Next 
    
    ProcedureReturn LaDate$
    
    FreeRegularExpression(0)
  Else
    FreeRegularExpression(0)
    ProcedureReturn "0"
  EndIf
  
EndProcedure

Debug VerifDat(t$)

End

~~~~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
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Utilisation de ReplaceString BUG ou pas BUG ??

Message par MLD »

Merci Ar-S
Mais en fait j'ai pris une date que pour l'exemple.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Utilisation de ReplaceString BUG ou pas BUG ??

Message par Ar-S »

Ah merde :D
Bon bah tant pis je l'ai fait autant la poster (je l'ajouterai au topic des exp régulières).

la v2 permettant l'extraction de la date avec choix du séparateur à chercher.

Code : Tout sélectionner

;Extracteur de date v2
;utilisant les expressions régulières
; Par Ar-S / Nov 2011 - P.B 4.60

; Extrait date sous forme jj-mm-aaaa (plus un espace) d'après une date dans sous la forme jjSEPARATEURmmSEPARATEURaaaa dans un string

t$ = "nous sommes le 16/11/2011 et on se caille les miches. Hier c'était pareil, le 15.11.2011 à 11h c'était encore givré" ; le string contenant la date
t$ + "la date suivante ne sera pas prise en compte : 17 11 2012 car le séparateur espace n'est pas indiqué"
Global Dim result$(0) 


Procedure.s ExtractDate(t$,ARS_separateur$)
  ; Ar-S
  ; Extraction de date v2
  
  Final$ = ""
  
  ; v2 permetant de trouver une date utilisant les separateurs "."  "/" et "-"
  expr$ = "([0-9]{2}+[" + ARS_separateur$ + "]){2}[0-9]{4}" 
  
  
  CreateRegularExpression(0,expr$)
  NbrTrouve = ExtractRegularExpression(0, t$ , result$()) ;Extrait les résultat dans result()
  
  If NbrTrouve>0
    
    For k = 0 To NbrTrouve-1
      LaDate$ = result$(k)
      Aremplacer$ = Mid(LaDate$,3,1)
      ; Ensuite la date est convertie ci besoin au format jj-mm-aaaa
      LaDate$ = ReplaceString(LaDate$,Aremplacer$,"-")
      
      If NbrTrouve = 1
        Final$ = LaDate$
      Else
        Final$ + " " + LaDate$
      EndIf
      
    Next 
    
    ; On supprime le 1er espace de gauche s'il y en a
    Final$ = LTrim(Final$)
    
    FreeRegularExpression(0)
    ProcedureReturn Final$
    
   
  Else
    FreeRegularExpression(0)
    ProcedureReturn "Pas de date !"
  EndIf
  
   
EndProcedure

Debug "test 1"
Debug ExtractDate(t$,"/.-") ; ici 3 séparateurs de recherchés

Debug "test 2"
Debug ExtractDate(t$," ") ; ici seulement le séparateur "espace"

End

~~~~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
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Utilisation de ReplaceString BUG ou pas BUG ??

Message par MLD »

Ar-S
Désolé :mrgreen: :wink:
Mais c'est bon pour le topic :lol:
Michel
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Utilisation de ReplaceString BUG ou pas BUG ??

Message par Ar-S »

Vivi pas de soucis, mais comme je l'avais fait.
~~~~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
Répondre