Festellen, ob ein String nur Zahlen enthält

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Noch kürzer als deines, MXVA:

Code: Alles auswählen

Procedure.b isNaN(number.s)
	Protected n.l
	For n=1 To Len(number)
		If Asc(Mid(number, n, 1)) < 48 Or Asc(Mid(number, n, 1)) > 57
			ProcedureReturn 1
		EndIf
	Next
EndProcedure
Debug isNaN("56")
JavaScript-importiert; dort steht NaN für Not a Number, deutsch: keine Zahl.

Wenn die Procedure 1 zurückgibt, dann ist der String NaN, wenn die Procedure 0 zurückgibt, ist der String nicht NaN, also doch eine Zahl.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wenn du NaN wills, geh doch zu Java... in Basic heis dat isNumeric.. :p
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

AND51 hat geschrieben:JavaScript-importiert
Ich will nicht zu JavaScript. Und wenn ich nicht zu JavaScript komme, muss JS eben zu PB kommen. <)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

:mrgreen: :roll:

..der punkt bei der sache ist einfach, dass die rückgabe von NaN gerade umgekehrt ist wie die von isNum

ich bin dagegen, sowas upzumixen, das stiftet nur verwirrung.

von daher, nenn deine Proc isNum* und vertausch True und False, dann isses ok.

* oder irgendwie
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Ich finde das nicht unbedingt verwirrend:

Wenn ich Frage: Ist das hier numerisch (-> IsNum), dann weiß ich doch, dass ich ein ja (True) bekommen muss.

Wenn ich jedoch Frage: Ist das hier keine Zahl (->isNaN), dann kriege ich auch ein ja.

Mir ist schon klar, dass ich den Sachverhalt nicht umkrempeln kann, sodass alle jetzt auf isNaN umsteigen... Will ich auch gar nicht.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich mein, is mir doch banane, du machst ja eh was de willst...

aber der thread heißt:
> Festellen, ob ein String nur Zahlen enthält

...und da liefert deine proc stets das falsche ergebnis..

ich finds halt a bissel sinnlos, damit zu prahlen, dass man weiß wies in JS heißt,
wenn man andere Anfänger damit nur verwirren kann...

...und grad wird ach a bissel sinnlos, das totzudiskutieren... ich bin raus...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Und das hier ist schneller :P

Code: Alles auswählen

Procedure.l isNumeric(*pString.Byte)
   Protected lResult.l
   
    If (*pString\b&$FF = '+') Or (*pString\b&$FF = '-')
        *pString + 1
    EndIf
   
    While *pString\b&$FF
        If ((*pString\b < '0') Or (*pString\b > '9'))
            ProcedureReturn #False
        EndIf
        ;*---
        *pString + 1
    Wend
   
    ProcedureReturn #True
EndProcedure

Debug isNumeric(@"123423 ich bin schneller 1234324")
Debug isNumeric(@"56")
Debug isNumeric(@"-56")
Debug isNumeric(@"+56")
Debug isNumeric(@"56+56")
Bild
Antworten