Seite 1 von 2
DAU-Fragen
Verfasst: 21.10.2004 11:07
von pbdau
Hallo, ich bin ein absoluter pb-neuling. Werde euch wahrscheinlich demnächst öfters nerven.
Also, hier meine ersten Fragen:
Ich habe an einem Beispiel gesehen, dass man über die Konsole per input() Strings Zeichen eingeben kann. Wie kann ich nur Zahlen eingeben (Variablen?) und z.B. prüfen, ob die Zahl maximal zweistellig ist? Gibt es dazu einen eigenen Befehl?
Wie heisst der Befehl in der grafischen Benutzeroberfläche?
Verfasst: 21.10.2004 12:11
von Rob
zahl.l = Val(string.s)
In der Hilfe zu den Strings zu finden.
Die Länge der Zahl ist maximal zweistellig, wenn der Wert <100 liegt. Logisch

Hast du sie als String, kannst du Len(zahl.s) nehmen. Wieder: siehe Hilfe.
Und willkommen im Forum.
Verfasst: 21.10.2004 15:58
von nco2k
such dir bitte in zukunft, eine etwas passendere überschrift.
p.s.: willkommen im forum.
c ya,
nco2k
wie stelle ich sicher, dass wirklich eine zahl eingegeben wi
Verfasst: 21.10.2004 16:59
von pbdau
Vielen Dank, werde mich bemühen, in Zukunft sinnvolle Titel zu erstellen.
und wie kann ich sicherstellen, dass wirklich nur eine zahl eingegeben werden kann?
Verfasst: 21.10.2004 17:25
von nco2k
indem der wert der zahl, kleiner als <10 sein muss ?!
c ya,
nco2k
äh
Verfasst: 21.10.2004 18:06
von pbdau
sei mir bitte nicht beleidigt, aber das verstehe ich jetzt nicht ganz.
Mein Problem: Ich möchte ein kleines Tool erstellen, dass Celsius in Fahrenheit umrechnet usw. D.h. ich muss positive / negative Zahlen von -174 Grad bis zu -zig Millionen Grad eingeben können, darf aber keine Buchstaben in der Eingabe haben, da sonst ja das Rechenergebnis falsch ist. Die Rechenfunktion kriege ich schon hin. Mein Problem ist sozusagen die "Sicherheitsabfrage", dass wirklich nur Zahlen eingegeben wurden. Das mit der Längenbegrenzung habe ich auch verstanden. Buchstaben (z.B. j/n) abfragen mit if ist auch nachvollziehbar. Aber wie man Zahlen daraufhin überprüft, dass wirklich nur Zahlen eingegeben wurden ...
Verfasst: 21.10.2004 18:10
von Ynnus
Wenn es ein Tool wird, dann ist es wohl auf einer Fensteroberfläche oder? Also ein Fensterprogramm und kein Screenprogramm.
Dann verwendest du wohl für die Eingabe ein Stringgadget oder? Bei diesen Gadgets kannst du als Flag angeben, dass nur Zahlen eingegeben werden können.
Beispiel:
Code: Alles auswählen
StringGadget(0, 20, 20, 300, 25, "", #PB_String_Numeric)
Dabei wird also ein Stringgadget mit der ID = 0 an der Stelle 20, 20 erstellt in das man nur Zahlen eingeben kann.
Verfasst: 21.10.2004 19:22
von nco2k
@pbdau
achso... sags doch gleich.
c ya,
nco2k
Verfasst: 21.10.2004 20:00
von Rob
Wenn es dagegen in der Konsole, dem "DOS-Fenster", abläuft, könntest du den String Zeichen für Zeichen durchgehen (parsen) und alles was Buchstabe ist rausschmeissen bzw. nur die ersten Zeichen, die zahlen sind, übernehmen. Das sähe dann so aus:
Code: Alles auswählen
Procedure.s NurZahlen(string.s)
l = Len(string) ; Länge des Strings
; i geht jetzt von 1 bis l immer eins weiter und kann
; so als Index benutzt werden
For i = 1 To l
buchstabe.s = Mid(string, i, 1) ; einen Buchstaben extrahieren
; Ist das ASCII-Zeichen keine zahl und kein punkt? (siehe ASCII-Tabelle für die werte)
If (Asc(buchstabe) < 48 Or Asc(buchstabe) > 57) And Asc(buchstabe) <> 46
Break ; Raus aus der Schleife
EndIf
Next
; der Index i ist jetzt an dem punkt des ersten auftretens eines
; zeichens, das keine zahl ist.
; beim string 123abc wäre er jetzt bei a, also an Position 4.
; Nun alles vor dieser Position extrahieren und zurückliefern
ProcedureReturn Mid(string,1,i-1)
EndProcedure
OpenConsole()
string.s = Input() ; Gib zum testen z.b. 123.23absg ein
string = NurZahlen(string)
zahl.f = ValF(string) ; Val() für Integer, ValF() für Floats, also Kommazahlen wie 3.141
PrintN("") ; zeilenumbruch. geht nicht einfacher...
; Print() kann nur Strings ausgeben, also float-zahl mit StrF() wieder in String umwandeln
PrintN(StrF(zahl))
Input() ; Auf return-druck warten, damit das fenster auf bleibt
Verfasst: 21.10.2004 21:28
von vonTurnundTaxis

Warum so kompliziert?
Schreib doch einfach einen Hinweis:
"NUR ZAHLEN dürfen eingegeben werden! Andernfalls wird das Eingeben von Buchstaben falsche Ergebnisse zur Folge haben!" ...

oder so...