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.
Tommy
Spassvogel
Beiträge: 319 Registriert: 17.10.2013 14:36
Beitrag
von Tommy » 24.01.2015 14:07
Code: Alles auswählen
;(c) Tommy
Procedure isNumeric(String.s)
String = ReplaceString(String, ",", ".")
ProcedureReturn Bool(Abs(ValF(String)) > 0 Or Abs(Val(String)) > 0 Or String = "0")
EndProcedure
Debug isNumeric("A123")
Debug isNumeric("123")
Debug isNumeric("123.456")
Debug isNumeric("123,456")
Debug isNumeric("$FF")
Debug isNumeric("-123")
Debug isNumeric("1.7e-6")
Debug isNumeric("%101")
Debug isNumeric("")
Debug isNumeric("0")
Zuletzt geändert von
Tommy am 26.01.2015 14:53, insgesamt 5-mal geändert.
PB 5.41 x64
Nino
Beiträge: 1300 Registriert: 13.05.2010 09:26
Wohnort: Berlin
Beitrag
von Nino » 24.01.2015 17:54
Code: Alles auswählen
Procedure isNumeric(String.s)
If String = Str(Val(String))
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Debug IsNumeric("1.23") ; -> 0 (falsch)
Debug IsNumeric("$FF") ; -> 0 (falsch)
NicTheQuick
Ein Admin
Beiträge: 8679 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200 Ubuntu 22.04.3 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:
Beitrag
von NicTheQuick » 24.01.2015 18:01
Hier auch ein älterer Thread mit dem selben Titel:
isNumeric .
Die Funktion kommt auch mit Fließkommazahlen zurecht, aber noch nicht mit Schreibweisen wie '$ff' oder '%10010'. Vielleicht könnte man ja da ansetzen.
Nino
Beiträge: 1300 Registriert: 13.05.2010 09:26
Wohnort: Berlin
Beitrag
von Nino » 24.01.2015 18:20
NicTheQuick hat geschrieben: Vielleicht könnte man ja da ansetzen.
Das folgende ist "etwas" kürzer
und kommt auch mit $FF u.ä. zurecht.
Code: Alles auswählen
Macro IsNumeric(string)
Bool(string <> "" And (Val(string) <> Val(string+"1") Or ValF(string) <> ValD(string+"1")))
EndMacro
; === Test ===
; Folgendes liefert 1:
Debug IsNumeric("-12")
Debug IsNumeric("0")
Debug IsNumeric("123")
Debug IsNumeric("-1.2")
Debug IsNumeric("0.0")
Debug IsNumeric("1.23")
Debug IsNumeric("$FF")
Debug IsNumeric("%101")
Debug IsNumeric("1.7e-6")
Debug IsNumeric("1.2345678901234567")
Debug ""
; Folgendes liefert 0:
Debug IsNumeric("12c")
Debug IsNumeric("abc")
Debug IsNumeric("")
Zuletzt geändert von
Nino am 24.01.2015 20:36, insgesamt 1-mal geändert.
Tommy
Spassvogel
Beiträge: 319 Registriert: 17.10.2013 14:36
Beitrag
von Tommy » 24.01.2015 18:28
Thx für die Hinweise und Mithilfe.
An die Sachen habe ich nich dran gedacht.
@Nino
Dein Code sagt bei "5,5" > 0
Ich habe mein Code verbessert und kommt auch mit "5,5" zurecht:
Code siehe oben
Zuletzt geändert von
Tommy am 26.01.2015 14:53, insgesamt 2-mal geändert.
PB 5.41 x64
Nino
Beiträge: 1300 Registriert: 13.05.2010 09:26
Wohnort: Berlin
Beitrag
von Nino » 24.01.2015 18:42
Tommy hat geschrieben: @Nino
Dein Code sagt bei "5,5" > 0
Das ist auch so beabsichtigt, denn 5,5 ist in PB keine gültige Zahl.
Tommy hat geschrieben: Code: Alles auswählen
;(c) Tommy
Procedure isNumeric(String.s)
String = ReplaceString(String, ",", ".")
ProcedureReturn Bool(Abs(ValF(String)) > 0 Or Abs(Val(String)) > 0)
EndProcedure
Hast Du mit diesem Code schonmal folgendes probiert?
Ehrlich gesagt würde ich von einem "Tipp oder Trick" doch erwarten, dass er stärker ausgereift ist.
NicTheQuick
Ein Admin
Beiträge: 8679 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200 Ubuntu 22.04.3 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:
Beitrag
von NicTheQuick » 24.01.2015 18:45
Aber jetzt kommt er nicht mehr mit 0 zurecht.
Tommy
Spassvogel
Beiträge: 319 Registriert: 17.10.2013 14:36
Beitrag
von Tommy » 24.01.2015 18:54
5,5 is aber in der Mathematik trotzdem eine gültige Zahl.
-3 funktioniert, wird 1 angezeigt.
0 tatschlich nich aber jetzt gehts.
Jetz müsste es ausgereift sein.
Code: Alles auswählen
;(c) Tommy
Procedure isNumeric(String.s)
String = ReplaceString(String, ",", ".")
ProcedureReturn Bool(Abs(ValF(String)) > 0 Or Abs(Val(String)) > 0 Or String = "0")
EndProcedure
Debug isNumeric("A123")
Debug isNumeric("123")
Debug isNumeric("123.456")
Debug isNumeric("123,456")
Debug isNumeric("$FF")
Debug isNumeric("-123")
Debug isNumeric("1.7e-6")
Debug isNumeric("%101")
Debug isNumeric("")
Debug isNumeric("0")
Zuletzt geändert von
Tommy am 26.01.2015 14:53, insgesamt 1-mal geändert.
PB 5.41 x64
NicTheQuick
Ein Admin
Beiträge: 8679 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200 Ubuntu 22.04.3 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:
Beitrag
von NicTheQuick » 24.01.2015 19:11
Das Problem ist, dass du den Trick von Nino mit dem + "1" wieder raus genommen hast.
Der hatte nämlich verhindert, dass das hier funktioniert:
Ich würde eine isNumeric-Funktion lieber komplett neu schreiben anstatt so herum zu tricksen. Dann bleibt sie schnell und man kann ohne viele Probleme alle Möglichkeiten abdecken.
Nino
Beiträge: 1300 Registriert: 13.05.2010 09:26
Wohnort: Berlin
Beitrag
von Nino » 24.01.2015 19:16
Tommy hat geschrieben: 5,5 is aber in der Mathematik trotzdem eine gültige Zahl.
Es geht hier aber nicht um reine Mathematik.
In der Mathematik ist z.B. auch
i eine gültige Zahl. Wird das von Deinem Code richtig erkannt?
Tommy hat geschrieben: -3 funktioniert, wird 1 angezeigt.
Stimmt, ich hatte das Abs() übersehen.