Wers braucht:
Code: Alles auswählen
; Gültiges Zahlenformat:
Procedure IsValidNumericalFormat(Var$)
Protected *Var.Character, *VarLF.Character
Protected FPE, FPP, ValType = #PB_Long
If Not Var$
ProcedureReturn #False
EndIf
*Var = @Var$
; Negative Zahlen erlaubt
If *Var\c = '-'
*Var + SizeOf(Character)
EndIf
Select *Var\c
Case '%' ; Binärzahl
*Var + SizeOf(Character)
While *Var\c
Select *Var\c
Case '0','1'
Default : ProcedureReturn #False
EndSelect
*Var + SizeOf(Character)
Wend
ProcedureReturn #True
Case '$' ; Hex-Zahl
*Var + SizeOf(Character)
While *Var\c
Select *Var\c
Case '0' To '9', 'a' To 'f', 'A' To 'F'
Default : ProcedureReturn #False
EndSelect
*Var + SizeOf(Character)
Wend
ProcedureReturn #True
Default ; Normale und Float - Zahlen:
While *Var\c
Select *Var\c
Case '0' To '9'
Case 'e' ; Floating-Point Exponent
If FPE
ProcedureReturn #False
Else
FPE = #True
ValType = #PB_Float
*VarLF = *Var + SizeOf(Character)
If *VarLF\c = '-'
*Var + SizeOf(Character)
*VarLF = *Var + SizeOf(Character)
EndIf
If Not *VarLF\c
ProcedureReturn #False
EndIf
EndIf
Case '.' ; Floating-Point Punkt
If FPP Or FPE
ProcedureReturn #False
Else
FPP = #True
ValType = #PB_Float
EndIf
Default : ProcedureReturn #False
EndSelect
*Var + SizeOf(Character)
Wend
ProcedureReturn ValType
EndSelect
EndProcedure
Debug "Gültig: "
Debug IsValidNumericalFormat("$FF")
Debug IsValidNumericalFormat("-%101011")
Debug IsValidNumericalFormat("123")
Debug IsValidNumericalFormat("-123")
Debug IsValidNumericalFormat("-123.")
Debug IsValidNumericalFormat("-123.45")
Debug IsValidNumericalFormat("123.45")
Debug IsValidNumericalFormat("-123.45e2")
Debug IsValidNumericalFormat("-123.45e-3")
Debug IsValidNumericalFormat("-123.e-3")
Debug "Ungültig: "
Debug IsValidNumericalFormat("$FX")
Debug IsValidNumericalFormat("%102011")
Debug IsValidNumericalFormat("123C")
Debug IsValidNumericalFormat("123..")
Debug IsValidNumericalFormat("-123.45eF")
Debug IsValidNumericalFormat("-123.45e-3.5")
Debug IsValidNumericalFormat("-123.e-.3")
Debug IsValidNumericalFormat("-$FF.")