isnummeric

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Pebender

Betreff: isnummeric

BeitragSo, Apr 16, 2017 12:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

in manchen Basicdialekten, gibt es den Befehl isnummeric, damit kann man prüfen, ob im Text nur Zahlen sind.
Wie kann ich denn in Bmax so einen Test machen??

mfg
BMax & MaxGUI

Jolinah

BeitragSo, Apr 16, 2017 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich glaube nicht dass es diese Funktion in Bmax gibt, bin mir jedoch nicht ganz sicher.

Aber selber so eine Funktion zu schreiben, sollte nicht allzu schwer sein. Zeichen für Zeichen durchgehen. Sobald du auf ein Zeichen triffst, das nicht einen ASCII-Wert zwischen 48 (0) und 57 (9) hat, kannst du False zurückgeben. Nachdem alle Zeichen durch sind und nie False zurückgegeben wurde, kannst du am Ende True zurückgeben. Optional kannst du auch den Dezimalpunkt mit dem ASCII-Wert 46 mit einbeziehen.

Pebender

BeitragSo, Apr 16, 2017 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke.

Ich wollte das ganze mit keydown () probieren, wobei mit ASCII...
Könnte simpler sein.

Mfg
BMax & MaxGUI

Pebender

BeitragSo, Apr 16, 2017 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke.

Ich wollte das ganze mit keydown () probieren, wobei mit ASCII...
Könnte simpler sein.

Mfg
BMax & MaxGUI

Hubsi

BeitragSo, Apr 16, 2017 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit: Gschmarre, hab Mist gepostet Rolling Eyes
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

BladeRunner

Moderator

BeitragSo, Apr 16, 2017 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMax: [AUSKLAPPEN]
Function isnumeric:Int(str:String,checkforPoint:Int=False)
For Local i:Int = 0 To 9
str = str.Replace(String(i) , "")
Next
If checkforPoint Then str = str.Replace(".","")
If str <> "" Then Return False
Return True
End Function

Global bla:String="123.4"
Print isnumeric(bla,True)
Print bla
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Xeres

Moderator

BeitragSo, Apr 16, 2017 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Grenzfall, dass von Anfang an ein leerer String eingegeben wird, müsste ggf. noch abgedeckt werden.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Pebender

BeitragMo, Apr 17, 2017 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry, ich weiß ich stell mich blöd an, aber wie kann ich damit ein Textfeld prüfen, damit nur Zahlen drin sind, und bei anderen Zeichen eine Fehlermeldung kommt ??

mfg
BMax & MaxGUI

Xeres

Moderator

BeitragMo, Apr 17, 2017 13:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Du ließt das Textfeld aus, wirfst den Inhalt in die Funktion und prüftst den Rückgabewert. Wenn nur die Zahlen von 0-9 drinne waren, gibt die Funktion true zurück. Ansonsten kannst du eine Fehlermeldung ausgeben, eine Exception werfen oder was auch immer.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Thunder

BeitragDi, Apr 18, 2017 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde BladeRunners Funktion echt interessant implementiert. Und zwar deswegen, weil ich sie nie so geschrieben hätte.
Wenn du die Funktion sehr oft ausführst, ist es vielleicht performanter sie anders zu schreiben, weil in BRs Code der String vielfach durchgelaufen wird und neue String-Objekte erstellt werden.
Mein Code sähe so aus (ist allerdings ungetestet):

BlitzMax: [AUSKLAPPEN]
Function isnumeric(str$, checkforpoint=False)
Local p = False
For Local i = 0 Until str.length
If str[i] = Asc "." Then
If Not checkforpoint Or p Then Return False
p = True
ElseIf str[i] < Asc "0" Or str[i] > Asc "9" Then
Return False
EndIf
Next
Return True
EndFunction
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

BladeRunner

Moderator

BeitragDi, Apr 18, 2017 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Indeed, dein Ansatz ist deutlich performance optimierter. Allerdings: wie oft wird diese Funktion im realen Betrieb aufgerufen? Wenn die Software selbst halbwegs brauchbar geschustert ist in der Regel wohl nur wenn eine Eingabe abgeschlossen wurde (oder, worst case, wenn ein neuer Tastendruck vorliegt). Solange man nicht seitenweise Text damit prüft sollte also auch der "unperformante" Ansatz genügen.

Xeres: You're right, allerdings erlaubt die Funktion in der derzeitigen Version weitere Eingaben auch beim Leerstring, da sie mit einem True aussteigt und somit nicht fälschlicherweise (und doch irgendwo korrekt) einen nicht numerischen String meldet. Der Leerstring ist ja ... weder numerisch noch nicht numerisch.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Fremen59

BeitragDi, Mai 16, 2017 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
hab die pograme eingegebn und getested, bei den pogram von BladeRunner wird auch "...." als numerik erkant

BladeRunner

Moderator

BeitragMi, Mai 17, 2017 8:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt. Das abzufangen ist aber nicht sonderlich kompliziert. Die Funktion war in 2 Minuten hingesaut, ich erhebe keinen Anspruch auf Perfektion.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group