Variable numerisch ??
Verfasst: 24.02.2005 17:52
Wie kann ich prüfen ob eine Stringvariable einen numerischen oder alphanumerischen Wert angenommen hat ??
Code: Alles auswählen
a$ ="12345"
b$ ="hallo"
c$ ="12345hallo"
d$ ="-37.5"
e$ ="521.764.738"
Debug Val(a$)
Debug Val(b$)
Debug Val(c$)
Debug Val(d$)
Debug Val(e$)
Debug "---------------"
Procedure CheckStrNum(Given.s)
Lang = Len(Given) ; Länge
P1 = Asc(Left(Given,1)) ; erstes zeichen
If (P1<48 Or P1>57) And P1 <> 45 And P1 <> 46 ; nicht 0-9 o. "-" o. "."
Test = -1 ; fehler
EndIf
If Given = "-" Or Given = "." Or Given = "-." ; "-" oder "." einzige zeichen?
Test = -1 ; fehler
EndIf
If p1 = 46 ; dezimalpunkt?
Decim = 1 ; flag "punkt war schon"
EndIf
If Test = 0 And Lang > 1 ; erstes zeichen numerisch und weitere vorhanden?
For i=2 To Lang
PA = Asc(Mid(Given,i,1))
If (PA<48 Or PA>57) And PA <> 46 ; nicht 0-9 oder "."
Test = -1 ; fehler
EndIf
If PA = 46 ; dezimalpunkt?
If Decim = 0 ; war noch nicht?
Decim = 1 ; merken
Else ; war schon?
Test = -1 ; fehler
EndIf
EndIf
Next
EndIf
ProcedureReturn Test
EndProcedure
Debug CheckStrNum(a$)
Debug CheckStrNum(b$)
Debug CheckStrNum(c$)
Debug CheckStrNum(d$)
Debug CheckStrNum(e$)
Code: Alles auswählen
If CheckStrNum(Bla$)
BlaVal = Val(Bla$)
EndIf
Code: Alles auswählen
Procedure IsNumeric(Text.s)
Result = #True
For I = 1 To Len(Text)
J.s = Mid(Text, I, 1)
If (Asc(J) < 58 And Asc(J) > 47) = #False
Result = #False
EndIf
Next
ProcedureReturn Result
EndProcedure
Code: Alles auswählen
Procedure IsAlphaNumeric(Text.s)
Result = #True
For I = 1 To Len(Text)
J.s = Mid(Text, I, 1)
If IsCharAlphaNumeric_(Asc(J)) = #False
Result = #False
EndIf
Next
ProcedureReturn Result
EndProcedure
Code: Alles auswählen
;Falko PB3.93b ohne API
;Unterscheidet zwischen Alpha und Nummeric (Buchstaben oder Zahlen ohne Vorzeichen,Punkt und Komma).
;Will man einen auch Andere Zeichen einsetzten kann
;Man das mit Hilfe der ASCII-Tabelle leicht erweitern.
;Hier habe ich nur zwiechen Zahlen ohne Leerzeichen und Buchstaben
;ein Beispiel gemacht.
String1.s="123Alphanumerisch 2"
String2.s="Mein Text ohne Zahlen"
String3.s="9805"
String4.s=" "
Procedure.l Get_Alpha_Num(Stringvariable.s)
Num.b=0:Alpha.b=0:Resume.b=0
For i = 1 To Len(Stringvariable)
;-liest und prüft die einzelnen Buchstaben und Zahlen
If Asc(Mid(Stringvariable,i,1)) >= 44 And Asc(Mid(Stringvariable,i,1)) <=57
If Asc(Mid(Stringvariable,i,1))=47 : Break :EndIf ; Schmeiß das '/' raus
Num=1
EndIf
If Asc(Mid(Stringvariable,i,1)) >= 65 And Asc(Mid(Stringvariable,i,1)) <=154
Alpha=1
EndIf
;-Unterscheidung von Alpha,Num,beides oder Nichts
If Num=1 And Alpha=1
Resume = 1
ElseIf Num=0 And Alpha=1
Resume = 2
ElseIf Num=1 And Alpha=0
Resume = 3
Else
Resume = 0
EndIf
Next
ProcedureReturn Resume
EndProcedure
Debug String1 + Space(6) + ":"+ Str(Get_Alpha_Num(String1)) ; Rückgabe sollte 1 für Alphanummerisch sein
Debug String2 + Space(3)+":"+Str(Get_Alpha_Num(String2)) ; Rückgabe sollte 2 für Alpha sein
Debug String3 + Space(32)+":"+Str(Get_Alpha_Num(String3)) ; Rückgabe sollte 3 für nummerisch sein
Debug String4 + Space(37)+":"+Str(Get_Alpha_Num(String4)) ; 0 Ausserhalb wenn andere Zeichen kommen.
Code: Alles auswählen
Procedure.l Get_Alpha_Num(Stringvariable.s)
Protected result,*p.BYTE
*p = @Stringvariable
While *p\b
;-liest und prüft die einzelnen Buchstaben und Zahlen
If *p\b >= 44 And *p\b <=57
result|1
ElseIf *p\b >= 65 And *p\b <=154
result|2
EndIf
*p+1
Wend
ProcedureReturn result
EndProcedure
Code: Alles auswählen
Procedure IsNumeric(string.s)
If string=Str(Val(string))
ProcedureReturn 1
EndIf
EndProcedure
Kann sein, aber doch sicherlich nicht die Steuerzeichen, die ja auch im Ascii-Code vorliegen!afaik bezeichnet 'Alphanumerisch' jeglichen ascii-code
@Kaeru GamanKaeru Gaman hat geschrieben:@Falko
> If Asc(Mid(Stringvariable,i,1)) >= 44 And Asc(Mid(Stringvariable,i,1)) <=57
@Deem
> If *p\b >= 44 And *p\b <=57.......
....und wieso sagt keiner was zu meinem code?![]()
habt ihr angst vor mir?(
![]()
)