Here's with negative numbers (and negative exponents):
Code: Select all
Structure SParseNumber
Input.s
Look.c
EndStructure
Procedure GetChar(*S.SParseNumber)
*S\Look = Asc(*S\Input)
*S\Input = Mid(*S\Input, 2)
EndProcedure
Procedure GetInteger(*S.SParseNumber)
Protected Result = 0
While *S\Look >= '0' And *S\Look <= '9'
Result = 1
GetChar(*S)
Wend
ProcedureReturn Result
EndProcedure
Procedure GetSign(*S.SParseNumber)
If *S\Look = '-'
GetChar(*S)
EndIf
EndProcedure
Procedure GetFloat(*S.SParseNumber)
; Returns:
; 0 = syntax error
; 1 = valid integer
; 2 = valid floating point
GetSign(*S)
IsInt = GetInteger(*S)
If IsInt And *S\Look = '.' ; decimal point
GetChar(*S)
IsInt = GetInteger(*S)
If IsInt = 0
ProcedureReturn 0 ; syntax error
EndIf
ProcedureReturn 2
EndIf
ProcedureReturn IsInt
EndProcedure
Procedure GetNumberType(S.s)
; PureBasic Forum: Trond
; Returns:
; 0 = syntax error
; 1 = valid integer
; 2 = valid floating point, but not with exponent
; 3 = valid number in exponent format
N.SParseNumber
N\Input = S
GetChar(@N)
IsFloat = GetFloat(@N)
If IsFloat And N\Look = 'e'
GetChar(@N)
GetSign(@N)
IsInt = GetInteger(@N)
If IsInt And N\Look = 0
ProcedureReturn 3
Else
ProcedureReturn 0
EndIf
EndIf
If N\Look = 0
ProcedureReturn IsFloat
Else
ProcedureReturn 0
EndIf
EndProcedure