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