String zu Int Array umwandeln
Übersicht

![]() |
PebenderBetreff: String zu Int Array umwandeln |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich habe folgendes Problem: Ich habe eine Textbox, in der sollen Zahlen eingetragen werden. Wenn ich eine Zahl eingebe soll die Zahl mit einem Array verglichen werden. Soll im Prinzip eine Funktion werden, die den Eintrag von Zahlen bis 100 zulässt und sonst keine anderen Zeichen. Mein Problem ist dabei ich bekomme den String von der Textbox nicht in ein Int Array konvertiert. Mein Ansatz war so: Code: [AUSKLAPPEN] Function Zahleneingabe()
Local c%[]=[0,1,2,3,4,5...] Local a$ 'Variable local deklarieren A$ = GadgetText$(Textfeld1) 'Inhalt Textfeld einer Variabeln zuordnen c% =Int(a$) 'kläglicher Versuch des konvertierens c% = a$ 'funktioniert auch nicht If GadgetText$(Textfeld1)= c% Then Notify"super" 'einfache Ausgabe wenns funktioniert End Function Hoffe das funktioniert überhaupt mit dem Ansatz, oder gibt es eine simplere(bessere) Methode ?? mfg Peter |
||
BMax & MaxGUI |
![]() |
Lastmayday |
![]() Antworten mit Zitat ![]() |
---|---|---|
du kannst in Bmax seinen string auch als array verwenden:
BlitzMax: [AUSKLAPPEN] Local str:String = "mein text" |
||
![]() |
Pebender |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke,
das ging ja mal schnell, werds gleich mal ausprobieren mfg Peter |
||
BMax & MaxGUI |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Blitzmax behandelt Strings als Objekt und bietet dafür einige Methoden.
Die die du suchst, ist zb: BlitzMax: [AUSKLAPPEN] input_string$ = GadgetText$(Textfeld1) es gibt viele dieser Methoden. .toInt() String.fromInt(zahl) .toFloat() String.fromFloat(zahl) usw usw ![]() Nachtrag: ich habe die grundfrage aber nicht verstanden. Was genau bezweckst du mit dem abgleich? Möchtest du nur unterbinden, das eine Zahl < 0 oder > 100 eingetragen wird? |
||
![]() |
Pebender |
![]() Antworten mit Zitat ![]() |
---|---|---|
im prinzip ja.
Es dürfen keine Zahlen <0 oder >100 sein und ich brauch die Zahlen für prozentuale Berechnungen. mfg Peter |
||
BMax & MaxGUI |
![]() |
Pebender |
![]() Antworten mit Zitat ![]() |
---|---|---|
das funktioniert ja, aber wie kann ich einen Integer mit einem Integer Array vergleichen ??
Code: [AUSKLAPPEN] If input_as_integer% <> c% Then Notify "falsch"
dann kommt eine Fehlermeldung "Unable to convert int to intarray" aber wie kann ich das convertieren ??? mfg Peter |
||
BMax & MaxGUI |
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Local array:Int[1] Local integer:Int = 5 array[0] = 5 if array[0]=integer Then Print "yup" Wo liegt das problem? |
||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du musst dir den unterschied zwischen einem Integer und einem Integer-Array vor augen halten.
Um einen vergleich mit einem Array durchzuführen, musst du jedes einzelne Element überprüfen. Ein Array ist nichts weiter wie eine Sammlung von werten "zusammengefasst", ums simpel auszudrücken. Das heißt, element 1 hat wert X, element 2 hat wert Y, element N hat wert Z. Um mal deinen Code aufzugreifen: BlitzMax: [AUSKLAPPEN] Function Zahleneingabe() Ich nehme jetzt einfach mal an, das du in dem Array die möglichen eingabewerte halten möchtest. Wenn es wirklich nur um die zahlen 0 bis 100 geht, reicht eine simple abfrage. BlitzMax: [AUSKLAPPEN] Local inputString:String = GagdetText(Textfeld1) Wenn es allerdings explizit mit dem Array sein muss, um zb auch die Zahl 50 zu sperren, so musst du den array durchgehen und jedes Element mit der Zahl vergleichen. Hier eine idee dazu: BlitzMax: [AUSKLAPPEN] Local arr:Int[] = [1,3,5,7...] '1 bis 99 - jede ungrade zahl (als beispiel) Hoffentlich hilft dir das weiter ![]() Ps: Setz dich nochmal ein wenig mit Arrays auseinander. Die sind sau praktisch, aber frustrieren nur, wenn man sie nicht ganz versteht. Solltest du hierzu weitere fragen haben, steht dir das Forum sicher gerne zur verfügung ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@pebender
1. sag mal, benötigst du das Array nur deshalb, weil du damit den Test gegen 0 bis 100 durchführen willst? Das get auch einfacher! 2. du arbeitest in deinem Programm dioch sowieso schon mit der MaxGui. Warum dann nicht gleich ein Vorab-Verbieten aller Zeichen außer Ziffern? 3. Und wenn schon mit der MaxGui. Warum dann keine Slider für eine solche Aufgabe? Ist viel Userfreundlicher! |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
Pebender |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich möchte halt das die Textboxen rein nur Zahlen enthalten dürfen, und keine Buchstaben und der gleichen.
ich hatte es auch schon mit chr() probiert, aber da scheitere ich daran, wenn ich zwei Zahlen eingebe (z.b 10 ) dann hängt sich das Programm auf. ich dachte halt ich nehme ein array vergleiche den Inhalt des array mit dem Inhalt der Textbox. ist der Inhalt <> 0 bis 100 dann sind andere Zeichen eingegeben worden. |
||
BMax & MaxGUI |
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Soweit ich weiß, werden Zeichen gänzlich entfernt, wenn man einen String zu einem Integer castet, von daher wird es keinen Fehler geben. Du kannst natürlich schon bei der Eingabe verhindern, dass andere Zeichen als Zahlen eingegeben werden. Entweder mit RegEx (Regular Expressions), was ein bisschen kompliziert ist, oder du prüfst einfach nach einer Eingabe den letzten veränderten Teil...
(Ich hab keinerlei Ahnung von MaxGui und weiß daher nicht, wie du deine Eingabe machen lässt, aber ich würds so überprüfen:) Code: [AUSKLAPPEN] Global DeinArray$[]
'... hier das Eingabezeugs If Int(Right(DeinArray[0],1)) >= 0 And Int(Right(DeinArray[0],1)) <= 9 Then 'Allet klar, kann weiter gehen Else DeinArray[0]=Left(DeinArray[0],Len(DeinArray[0])-1) EndIf Musst du natürlich noch an dein Zeugs anpassen. Was dieser Code machen würde sieht man ja, falls die Bedingung der Zahl erfüllt wird, kann man etwas bestimmtes passieren lassen (oder es eben lassen, falls nicht gebraucht muss man eben die Bedingung einfach umstellen und kann sich so ein bisschen Code sparen), falls es etwas anderes als eine Zahl ist, wird der Eingabe-Array einfach wieder um die letzte Eingabe gekürzt. Ich versteh ehrlich nicht gesagt, wo dein Problem ist. Ich glaub du machst es dir irgendwo einfach ein bisschen zu kompliziert ![]() |
||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das was Midimaster meint ist ganz einfach, dass es eine Funktion gibt die ein Gadget die Eingabe filtern lässt!
Die Funktion heißt SetGadgetFilter. Es gibt ein Beispiel dazu in der Hilfe, ich habe die entsprechende Stelle modifiziert und kommentiert: Jetzt werden lediglich Zahlen angenommen, Buchstaben und Zeichen nicht. BlitzMax: [AUSKLAPPEN] ' setgadgetfilter.bmx |
||
Blessed is the mind too small for doubt |
![]() |
Pebender |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke,
werd mich mal durchwurschteln ![]() mfg Peter |
||
BMax & MaxGUI |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau! Dachte ich mir doch gleich, dass SetGadgetFilter() besser zu Deinem Problem passt.
Und dann checkst Du einfach noch zusätzlich ob der Wert des Textfeldes durch den letzten Tastendruck nicht größer als 100 wurde. BlitzMax: [AUSKLAPPEN] While WaitEvent() |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
Pebender |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Midimaster
vielen Dank , habs erst jetzt gesehen. |
||
BMax & MaxGUI |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group