Seite 1 von 2
String überprüfen?
Verfasst: 20.09.2006 10:21
von roherter
Wie kann ich am besten ein string überprüfen so das ich weiß das er nur Zahlen von 0-9 und das dezimalzeichen enthält?
Bei PHP kann man das ganz einfach lösen nur bei PB fällts mir jetzt auf anhieb etwas schwer.

Verfasst: 20.09.2006 10:30
von edel
Code: Alles auswählen
Procedure IsNum(string.s)
Protected *char.character = @string
If *char
While *char\c
Select *char\c
Case '0' To '9', '.' , ','
*char + SizeOf(character)
Default
ProcedureReturn #False
EndSelect
Wend
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Debug IsNum("71.3")
Debug IsNum("2")
Debug IsNum("a")
Verfasst: 20.09.2006 10:32
von Tafkadasom2k5
Bin mir nicht sicher, aber gibt es nicht sowas wie "Findstring"? Oder "Instring"? Bin gerade bei der Arbeit und habe die PB-Hilfe nicht zur Hand, aber ansonsten könntest du mithilfe von "Instring" (o.Ä.) und einer For-Schleife die jeweiligen "CHR()"'s durchgehen, und bei "Instring" = 1 Alarm schlagen.
Guck einfach mal nach dem Befehl erstmal.
Gr33tz
Tafkadasom2k5
Edit:
Oder mache dein String-Gadget einfach "Numeric"
EditEdit:
Habe diesen Code aus Urzeiten mal ausgegraben... vielleicht hilft dieser dir ja..?
Code: Alles auswählen
Procedure CheckCharsDetail(Eingabe.s,Notallowed.s)
Details.s = ""
Analyze.s = ""
HowMany.l = 0
For I=1 To Len(Eingabe.s)
Analyze = Mid(Eingabe,I,1)
For A=1 To Len(Notallowed)
If Analyze = Mid(Notallowed,A,1)
If Details = ""
Details = Details + Mid(Notallowed,A,1)
Else
Details = Details + "," + Mid(Notallowed,A,1)
EndIf
HowMany = HowMany + 1
EndIf
Next
Next
If HowMany > 0
Debug HowMany
Debug Details
ProcedureReturn(HowMany)
Else
ProcedureReturn(0)
EndIf
EndProcedure
Eingabe.s = InputRequester("Eingabe","Wort eingeben das geprüft werden soll","")
Notallowed.s = InputRequester("Eingabe","Buchstaben eingeben, auf die das Wort geprüft werden soll (z.B. 'abcdefg123')","")
CheckCharsDetail(Eingabe,Notallowed)
Verfasst: 20.09.2006 10:41
von roherter
Ich benutze ein Editorgadget wenn ich es auf numeric umschalte kann man keine Fließkommazahlen benutzen leider.
danke @edel
Verfasst: 20.09.2006 10:47
von edel
roherter hat geschrieben:Ich benutze ein Editorgadget wenn ich es auf numeric umschalte kann man keine Fließkommazahlen benutzen leider.
danke @edel
Dazu gibt es hier schon einiges. Boardsuche benutzen ...
Verfasst: 20.09.2006 10:52
von roherter
Deine Procedure reicht mir schon,thx.

Verfasst: 20.09.2006 10:56
von Tafkadasom2k5
Ich werde ignoriert...

bin ja schon ruhig...

Verfasst: 20.09.2006 11:05
von ts-soft
Tafkadasom2k5 hat geschrieben:Ich werde ignoriert...

bin ja schon ruhig...

Deins ist a bissel langsam
Ob meins schneller ist, als edel kann ja mal einer Testen, hab kein Case benutzt, sowie for next
Code: Alles auswählen
Procedure IsStringNum(String.s)
Length = Len(String)
Protected *Mem.Character = @String
For I = 0 To Length - 1
If *Mem\c < 48 Or *Mem\c > 57 ; keine Zahl
If *Mem\c <> 46 ; auch kein dezimalpunkt
ProcedureReturn #False
EndIf
EndIf
*Mem + SizeOf(Character)
Next
ProcedureReturn #True
EndProcedure
Verfasst: 20.09.2006 11:14
von Tafkadasom2k5
ts-soft hat geschrieben:Tafkadasom2k5 hat geschrieben:Ich werde ignoriert...

bin ja schon ruhig...

Deins ist a bissel langsam

Ja, weil es sich wirklich auf die Details bezieht (ich lasse mir ja auch ausgeben, welche Buchstaben in welcher Reihenfolge falsch auftauchen...

)
Nundenn...

Verfasst: 20.09.2006 13:48
von Kaeru Gaman
ts' und edels routinen haben aber eine schwachstelle:
sie liefern auch bei fehlerhaft mehreren dezimalzeichen ein "OK"..
Code: Alles auswählen
Procedure IsNum(string.s)
Protected *char.character = @string
If *char
While *char\c
Select *char\c
Case '0' To '9', '.' , ','
*char + SizeOf(character)
Default
ProcedureReturn #False
EndSelect
Wend
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Debug IsNum("71,323.7812,098")