Un peu plus court et surtout valable pour presque toute valeur numérique sous forme de chaine.
Sauf pour une valeur numérique >0 en tête de chaine, mais peut être amélioré.
Code : Tout sélectionner
Procedure Isnumeric(STRNG.s)
STRNG=ReplaceString(STRNG, " ", "" )+"1" ; peut être supprimé si l'on considére qu'une chaine avec 1 ou plusieurs Blancs n'est pas numérique
; STRNG+"1" ; peut remplacer l'instruction précedente
If ValD(STRNG)<>0 Or Val(STRNG)<>0
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Dim tab.s{15}(20)
tab(I)="458"
i+1:tab(I)="-458"
i+1:tab(I)="+ 45. 8 "
i+1:tab(I)="$BCE"
i+1:tab(I)="45.8"
i+1:tab(I)="%101010"
i+1:tab(I)="5.667e-2"
i+1:tab(I)="-5.667e-2"
i+1:tab(I)="azafdf"
i+1:tab(I)="a654"
i+1:tab(I)="0.00"
i+1:tab(I)="%0 0 0 0 0 0"
i+1:tab(I)="AB0 045ABCD 0 0 0 0"
i+1:tab(I)="0045ABCD 0 0 0 0" ; C'est un cas ou l'algo trouve une valeur numérique
i+1:tab(I)="00 0ABCD 0 0 0 0"
Jmax=i
For i=0 To jmax
VALN=isnumeric(tab(i))
Debug "num="+Str(valn)+" i="+Str(i)+" tab(i)="+tab(i)
Next