Vérifier si un texte repésente une valeur décimale ou hexa

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Vérifier si un texte repésente une valeur décimale ou hexa

Message par Le Soldat Inconnu »

Un petit code qui permet de vérifier si un texte représente une valeur décimale ou une valeur hexadécimale

Code : Tout sélectionner

Procedure IsVal(Chaine.s)
	; Retourne différent de 0 si la chaine est un nombre
	Static Separateur.s
	Protected Verification.s
	If Separateur = ""
		Separateur = Mid(StrF(1.5), 2, 1)
		Debug Separateur
	EndIf
	Verification = StrD(ValD(Chaine))
	If FindString(Verification, Separateur)
		Verification = RTrim(RTrim(Verification, "0"), Separateur)
	EndIf
	Verification = RSet(Verification, Len(Chaine), "0")
	Debug Verification
	Debug Chaine
	If Verification = Chaine And Chaine
		Debug "Ok"
		ProcedureReturn 1
	Else
		Debug "Erreur"
		ProcedureReturn 0
	EndIf
EndProcedure

Procedure IsHexVal(Chaine.s)
	; Retourne différent de 0 si la chaine est une valeur hexadécimale
	Protected Verification.s
	Verification = Hex(Val(Chaine), #PB_Long)
	Verification = LTrim(Verification, "0")
	Verification = RSet(Verification, Len(Chaine) - 1, "0")
	Verification = "$" + Verification
	Debug Verification
	Debug Chaine
	If LCase(Verification) = LCase(Chaine) And Chaine
		Debug "Ok"
		ProcedureReturn 1
	Else
		Debug "Erreur"
		ProcedureReturn 0
	EndIf
EndProcedure

IsVal("12")
IsVal("-1052")
IsVal("1.25456")
IsVal("0")
IsVal("00123")
IsVal("100")
IsVal("bonjour")
IsVal("10 bonjour")
IsVal("a198")
IsVal("0011_")
IsVal("")

Debug ""
Debug "***************************"
Debug ""

IsHexVal("bonjour")
IsHexVal("10 bonjour")
IsHexVal("541")
IsHexVal("$0011_")
IsHexVal("$A198")
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par Le Soldat Inconnu »

Il y a bug, je corrige et je reposte
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par Le Soldat Inconnu »

bon, cela semble être mieux. Si vous avez des idées de valeur bizarre à tester, merci par avance pour vérifier la robustesse du code :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par lepiaf31 »

Heu et avec un expression régulière c'est pas plus simple ? (et plus robuste du coup ^^) :

Code : Tout sélectionner

Procedure isVal(string.s)
  Protected res.b, regExp.i
  
  regExp = CreateRegularExpression(#PB_Any, "^-?[0-9]+(.[0-9]+)?$")
  res = MatchRegularExpression(regExp, string)
  FreeRegularExpression(regExp)
  
  ProcedureReturn res
EndProcedure

Procedure isHexVal(string.s)
  Protected res.b, regExp.i
  
  regExp = CreateRegularExpression(#PB_Any, "^-?\$[0-9A-Fa-f]+$")
  res = MatchRegularExpression(regExp, string)
  FreeRegularExpression(regExp)
  
  ProcedureReturn res
EndProcedure

Debug IsVal("12")
Debug IsVal("-1052")
Debug IsVal("1.25456")
Debug IsVal("0")
Debug IsVal("00123")
Debug IsVal("100")
Debug IsVal("bonjour")
Debug IsVal("10 bonjour")
Debug IsVal("a198")
Debug IsVal("0011_")
Debug "**************"
Debug IsHexVal("bonjour")
Debug IsHexVal("10 bonjour")
Debug IsHexVal("541")
Debug IsHexVal("$0011_")
Debug IsHexVal("$A198")
Dernière modification par lepiaf31 le mar. 21/févr./2012 21:08, modifié 2 fois.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par Guimauve »

Bonjour à tous,

@lepiaf31

C'est certain qu'avec les expressions régulières c'est plus simple. Cependant la valeur "0" n'est pas reconnue comme une valeur numérique alors que c'est le cas.

Code : Tout sélectionner

Procedure IsVal(string.s)
  
  Protected res.b, regExp.i
  
  regExp = CreateRegularExpression(#PB_Any, "^-?[0-9]+.[0-9]+$")
  res = MatchRegularExpression(regExp, string)
  FreeRegularExpression(regExp)
  
  ProcedureReturn res
EndProcedure

Procedure IsHexVal(string.s)
  
  Protected res.b, regExp.i
  
  regExp = CreateRegularExpression(#PB_Any, "^-?\$[0-9A-Za-z]+$")
  res = MatchRegularExpression(regExp, string)
  FreeRegularExpression(regExp)
  
  ProcedureReturn res
EndProcedure

Macro AddElementEx(ListName, Value)
  
  AddElement(ListName)
  ListName = Value
  
EndMacro

NewList Values.s()
NewList HexValues.s()

AddElementEx(Values(), "12")
AddElementEx(Values(), "-1052")
AddElementEx(Values(), "1.25456")
AddElementEx(Values(), "0")
AddElementEx(Values(), "000123")
AddElementEx(Values(), "100")
AddElementEx(Values(), "bonjour")
AddElementEx(Values(), "10 bonjour")
AddElementEx(Values(), "a198")
AddElementEx(Values(), "0011_")

AddElementEx(HexValues(), "bonjour")
AddElementEx(HexValues(), "10 bonjour")
AddElementEx(HexValues(), "541")
AddElementEx(HexValues(), "$0011_")
AddElementEx(HexValues(), "$A198")

ForEach Values()
  
  If IsVal(Values()) = 1
    Debug "L'entrée " + Chr(34) + Values() + Chr(34) + " est bien une valeur numérique"
  Else
    Debug "L'entrée " + Chr(34) + Values() + Chr(34) + " n'est pas une valeur numérique"
  EndIf
  
Next

Debug ""
Debug "**************"
Debug ""

ForEach HexValues()
  
  If IsHexVal(HexValues()) = 1
    Debug "L'entrée " + Chr(34) + HexValues() + Chr(34) + " est bien une valeur hexadécimale"
  Else
    Debug "L'entrée " + Chr(34) + HexValues() + Chr(34) + " n'est pas une valeur hexadécimale"
  EndIf
  
Next
Débogueur a écrit :L'entrée "12" n'est pas une valeur numérique
L'entrée "-1052" est bien une valeur numérique
L'entrée "1.25456" est bien une valeur numérique
L'entrée "0" n'est pas une valeur numérique
L'entrée "000123" est bien une valeur numérique
L'entrée "100" est bien une valeur numérique
L'entrée "bonjour" n'est pas une valeur numérique
L'entrée "10 bonjour" n'est pas une valeur numérique
L'entrée "a198" n'est pas une valeur numérique
L'entrée "0011_" n'est pas une valeur numérique

**************

L'entrée "bonjour" n'est pas une valeur hexadécimale
L'entrée "10 bonjour" n'est pas une valeur hexadécimale
L'entrée "541" n'est pas une valeur hexadécimale
L'entrée "$0011_" n'est pas une valeur hexadécimale
L'entrée "$A198" est bien une valeur hexadécimale
De plus, je pense qu'il faudrait ajouter un commande de type IsRealVal() pour les nombres réels (Float et Double)

A+
Guimauve
Dernière modification par Guimauve le mar. 21/févr./2012 20:27, modifié 2 fois.
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par lepiaf31 »

Ooooups en effet, petite erreur dans l'expression. Code corrigé, maintenant ca marche ;)
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par Guimauve »

Il y a encore un problème, les valeurs hexadécimales s'arrête à F ou f. Voici une version corrigé. IsVal() s'occupe des valeurs entières seulement, IsReal() s'occupe des valeurs numériques plus générale et finalement IsHexVal() s'occupe des valeur kexadécimales.

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Commande dé vérification du type de valeur
; Nom du fichier : IsVal - IsReal - IsHexVal.pb
; Version du fichier : 1.0.0
; Programmation : OK
; Programmé par : Guimauve
; Date : 21-02-2012
; Mise à jour : 21-02-2012
; Code PureBasic : 4.50
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure IsVal(string.s) 
  
  Protected res.b, regExp.i 

  regExp = CreateRegularExpression(#PB_Any, "^-?[0-9]+?$")
  res = MatchRegularExpression(regExp, string) 
  FreeRegularExpression(regExp) 
  
  ProcedureReturn res 
EndProcedure 

Procedure IsHexVal(string.s) 
  
  Protected res.b, regExp.i 
  
  regExp = CreateRegularExpression(#PB_Any, "^-?\$[0-9A-Fa-f]+$") 
  res = MatchRegularExpression(regExp, string) 
  FreeRegularExpression(regExp) 
  
  ProcedureReturn res 
EndProcedure 

Procedure IsReal(string.s) 
  
  Protected res.b, regExp.i 
  
  regExp = CreateRegularExpression(#PB_Any, "^-?[0-9]+(.[0-9]+)?$") 
  res = MatchRegularExpression(regExp, string) 
  FreeRegularExpression(regExp) 
  
  ProcedureReturn res 
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! ATTENTION - CODE D'ESSAI !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Macro AddElementEx(ListName, Value)
  
  AddElement(ListName)
  ListName = Value
  
EndMacro

NewList Values.s()

AddElementEx(Values(), "12")
AddElementEx(Values(), "-1052")
AddElementEx(Values(), "1.25456")
AddElementEx(Values(), "0")
AddElementEx(Values(), "0.0")
AddElementEx(Values(), "000123")
AddElementEx(Values(), "100")
AddElementEx(Values(), "bonjour")
AddElementEx(Values(), StrD(2.0*#PI, 18))
AddElementEx(Values(), "10 bonjour")
AddElementEx(Values(), "a198")
AddElementEx(Values(), "0011_")

AddElementEx(Values(), "bonjour")
AddElementEx(Values(), "100 bonjour")
AddElementEx(Values(), "541")
AddElementEx(Values(), "$0011_")
AddElementEx(Values(), "$A198")
AddElementEx(Values(), "$Z198")

ForEach Values()
  
  If IsVal(Values()) = 1
    Debug "L'entrée " + Chr(34) + Values() + Chr(34) + " est bien une valeur numérique entière"
  ElseIf IsReal(Values()) = 1
    Debug "L'entrée " + Chr(34) + Values() + Chr(34) + " est bien une valeur numérique flottante"
  ElseIf IsHexVal(Values()) = 1
    Debug "L'entrée " + Chr(34) + Values() + Chr(34) + " est bien une valeur hexadécimale"
  Else
    Debug "L'entrée " + Chr(34) + Values() + Chr(34) + " n'est pas une valeur valide"
  EndIf

Next

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
A+
Guimauve
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par lepiaf31 »

Oula oui, tu as raison !!

Décidemment, c'est pas la grande forme ce soir ..
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par Guimauve »

Re-Bonjour,

Je pense que pour être plus "Safe" il faudrait faire comme suit :

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Commande dé vérification du type de valeur
; Nom du fichier : IsVal - IsReal - IsHexVal.pb
; Version du fichier : 1.0.1
; Programmation : OK
; Programmé par : Guimauve
; Date : 21-02-2012
; Mise à jour : 21-02-2012
; Code PureBasic : 4.50
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Note :
;
; Les commandes suivantes sont inspirés d'un code fournie par 
; lepiaf (forum PureBasic Fr)
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure IsVal(string.s) 
  
  Protected res.b, regExp.i 

  regExp = CreateRegularExpression(#PB_Any, "^[-+]?[0-9]+?$")
  res = MatchRegularExpression(regExp, string) 
  FreeRegularExpression(regExp) 
  
  ProcedureReturn res 
EndProcedure 

Procedure IsHexVal(string.s) 
  
  Protected res.b, regExp.i 
  
  regExp = CreateRegularExpression(#PB_Any, "^[-+]?\$[0-9A-Fa-f]+$") 
  res = MatchRegularExpression(regExp, string) 
  FreeRegularExpression(regExp) 
  
  ProcedureReturn res 
EndProcedure 

Procedure IsReal(string.s) 
  
  Protected res.b, regExp.i 
  
  regExp = CreateRegularExpression(#PB_Any,"^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$")
  res = MatchRegularExpression(regExp, string) 
  FreeRegularExpression(regExp) 
  
  ProcedureReturn res 
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! ATTENTION - CODE D'ESSAI !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Macro AddElementEx(ListName, Value)
  
  AddElement(ListName)
  ListName = Value
  
EndMacro

NewList Values.s()

AddElementEx(Values(), "12")
AddElementEx(Values(), "-1052")
AddElementEx(Values(), "1.25456")
AddElementEx(Values(), "0")
AddElementEx(Values(), "0.0")
AddElementEx(Values(), "000123")
AddElementEx(Values(), "100")
AddElementEx(Values(), "bonjour")
AddElementEx(Values(), StrD(2.0*#PI, 18))
AddElementEx(Values(), "10 bonjour")
AddElementEx(Values(), "1.5e25")
AddElementEx(Values(), "a198")
AddElementEx(Values(), "0011_")
AddElementEx(Values(), "bonjour")
AddElementEx(Values(), "100 bonjour")
AddElementEx(Values(), "541")
AddElementEx(Values(), "$0011_")
AddElementEx(Values(), "$A198")
AddElementEx(Values(), "$Z198")

ForEach Values()
  
  If IsVal(Values()) = 1
    Debug "L'entrée " + Chr(34) + Values() + Chr(34) + " est bien une valeur numérique entière"
    Found = 1
  EndIf
  
  If IsReal(Values()) = 1
    Debug "L'entrée " + Chr(34) + Values() + Chr(34) + " est bien une valeur numérique flottante"
    Found = 1
  EndIf
  
  If IsHexVal(Values()) = 1
    Debug "L'entrée " + Chr(34) + Values() + Chr(34) + " est bien une valeur hexadécimale"
    Found = 1
  EndIf
  
  If Found = 1
    Found = 0
  Else
    Debug "L'entrée " + Chr(34) + Values() + Chr(34) + " n'est pas une valeur valide"
  EndIf
  
  Debug ""
  
Next

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
L'ennui c'est que la commande IsReal() prend les valeurs entières comme valide. Je n suis pas sûr que ce problème puisse être corrigé. La meilleure solution serait probablement de procéder en deux étapes, la première à savoir si c'est une valeur numérique générale et la 2e à savoir s'il s'agit d'une valeur entière ou d'un réel.

A+
Guimauve
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par lepiaf31 »

Il ne suffit pas juste d'enlever ce point d'interrogation: ^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$

Le point deviendra alors obligatoire dans l'expression et on aura donc forcément un nombre flottant.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par Guimauve »

Je ne sais pas trop comment fonctionne les expressions régulières en fait. Je me suis basé sur un exemple disponible ici : http://www.regular-expressions.info/floatingpoint.html

Seulement si le point devient obligatoire et que l'on tente de lire un fichier WaveFrontObject et que le logiciel qui à générer le fichier ne met par les valeurs du genre "0.000000", il met "0" ça va poser de graves problèmes.
La meilleure solution est celle qui sera adapté au contexte du problème à solutionner.

A+
Guimauve
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par Le Soldat Inconnu »

sauf que le séparateur peut être une virgule, cela dépend des options régionale en fait (quel bordel ce truc)

J'ai modifié mon premier code par rapport à cela.

Les expressions régulières, ce n'est pas trop lent ?
Il faut que je compare les temps de traitement.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par Le Soldat Inconnu »

Ma méthode est presque 1.5 fois plus rapide chez moi, et pour vous ? (je n'ai comparer que pour les réels)

Code : Tout sélectionner

Procedure IsVal(Chaine.s)
	; Retourne différent de 0 si la chaine est un nombre
	Static Separateur.s
	Protected Verification.s
	If Separateur = ""
		Separateur = Mid(StrF(1.5), 2, 1)
		Debug Separateur
	EndIf
	Verification = StrD(ValD(Chaine))
	If FindString(Verification, Separateur)
		Verification = RTrim(RTrim(Verification, "0"), Separateur)
	EndIf
	Verification = RSet(Verification, Len(Chaine), "0")
	Debug Verification
	Debug Chaine
	If Verification = Chaine And Chaine
		Debug "Ok"
		ProcedureReturn 1
	Else
		Debug "Erreur"
		ProcedureReturn 0
	EndIf
EndProcedure


Procedure IsReal(string.s)  
	
	Protected res.b, regExp.i  
	
	regExp = CreateRegularExpression(#PB_Any,"^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$") 
	res = MatchRegularExpression(regExp, string)  
	FreeRegularExpression(regExp)  
	
	ProcedureReturn res  
EndProcedure 


#nb = 500000

Temps1 = ElapsedMilliseconds()

For n = 1 To #nb
	IsVal("123.45") 
Next

Temps2 = ElapsedMilliseconds()

For n = 1 To #nb
	IsReal("123.45") 
Next

Temps3 = ElapsedMilliseconds()

MessageRequester("Test rapidité", "Solution 1 : " + Str(Temps2 - Temps1) + " ; Solution 2 : " + Str(Temps3 - Temps2) + Chr(10) + "Ratio = 1 / " + StrF((Temps2 - Temps1) / (Temps3 - Temps2)), 0)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par Guimauve »

Bonjour,

Moi le résultat qui s'affiche c'est :
  • Solution 1: 600
  • Solution 2 : 848
  • Ratio = 1 / 0.70754718
Un peu plus lent effectivement.

LinuxMint 12 x64 + PureBasic 4.61 Beta 1 x64

A+
Guimauve
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: Vérifier si un texte repésente une valeur décimale ou he

Message par PAPIPP »

Bonjour à tous
il n'est pas nécessaire de libérer et de recréer l’expression régulière à chaque appel ce qui nous fait gagner un peu de temps.

Code : Tout sélectionner

Procedure IsVal(Chaine.s)
  ; Retourne différent de 0 si la chaine est un nombre
  Static Separateur.s
  Protected Verification.s
  If Separateur=""
    Separateur=Mid(StrF(1.5),2,1)
    Debug Separateur
  EndIf
  Verification=StrD(ValD(Chaine))
  If FindString(Verification,Separateur)
    Verification=RTrim(RTrim(Verification,"0"),Separateur)
  EndIf
  Verification=RSet(Verification,Len(Chaine),"0")
  Debug Verification
  Debug Chaine
  If Verification=Chaine And Chaine
    Debug "Ok"
    ProcedureReturn 1
  Else
    Debug "Erreur"
    ProcedureReturn 0
  EndIf
EndProcedure

Procedure IsReal(string.s)
  Static flag.i,res.b,regExp.i
  If flag=0
    regExp=CreateRegularExpression(#PB_Any,"^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$")
    flag=1
  EndIf
  res=MatchRegularExpression(regExp,string)
;   FreeRegularExpression(regExp)
  
  ProcedureReturn res
EndProcedure


#nb=500000

Temps1=ElapsedMilliseconds()

For n=1 To #nb
  IsVal("123.45")
Next

Temps2=ElapsedMilliseconds()

For n=1 To #nb
  IsReal("123.45")
Next

Temps3=ElapsedMilliseconds()

MessageRequester("Test rapidité","Solution 1 : "+Str(Temps2-Temps1)+" ; Solution 2 : "+Str(Temps3-Temps2)+Chr(10)+"Ratio = 1 / "+StrF((Temps2-Temps1)/(Temps3-Temps2)),0)

@+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Répondre