Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Stringwert auf Integerwert prüfen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
studio



Anmeldungsdatum: 08.08.2005
Beiträge: 34

BeitragVerfasst am: 22.08.2005, 10:57    Titel: Stringwert auf Integerwert prüfen Antworten mit Zitat

Hallo!

Ich habe eine INPUT Variable -> Menge$. Diese sollte nach Eingabe
auf Ihren Inhalt geprüft werden. Es dürfen nur Zahlen enthalten sein.
Ansonsten sollte eine entsprechende Fehlermeldung ausgegeben werden.

Folgendes hatte ich mir gedacht:
--
LOCATE 2,4 : INPUT "Menge:",Menge$
IF Menge$ = "" OR VAL(VMenge$) = 0 THEN
BEEP ,,2,0
LOCATE 2,6 : PRINT "FALSCHE MENGENANGABE"
END IF
--
Mit VAL erreiche ich leider nicht das gewünschte Ziel.
z.B. Benutzereingabe:
-------------------------
Menge: 123 -> Resultat = 123 (ok)
Menge: CCC -> Resultat mit VAL = 0 (ok)
Menge: 1CC -> Resultat mit VAL = 1 (nicht ok)

Hat jemand eine Idee wie ich das Problem angehen könnte?

Im Voraus schon einmal vielen Dank für Eure Mühe.

Gruß
studio
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 22.08.2005, 11:04    Titel: Antworten mit Zitat

Hier könnte dir INSTR helfen. INSTR gibt die Position eines Strings innerhalb eines anderen vor. Du könntest prüfen, ob die ASCII-Zeichen 0-47 bzw 58-255 in Menge$ vorkommt:

Code:
INPUT "Menge?"; Menge$

FOR i = 0 To 47
  IF INSTR(Menge$, Chr$(i)) Then Print "Fehler": GOTO KeinePruefungMehr
NEXT

FOR i = 58 To 255
   IF INSTR(Menge$, Chr$(i)) Then Print "Fehler": GOTO KeinePruefungMehr
NEXT

KeinePruefungMehr:
....


Oder aber, du gibtst bei INPUT gleich eine Integer-Variable an. Hat halt den Nachteil, dass die zweite Abfrage eine Zeile drunter stattfindet, und das sieht nicht grade schön aus. Ich nehme an, deswegen verwendest du die STRING-Methode?
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 22.08.2005, 11:14    Titel: Antworten mit Zitat

Wieso liest du eigentlich nicht gleich die Variable als Zahl ein, dann verhindert QB sowieso jegliche Eingabe, die keine Zahl ist:
Code:
LOCATE 2,4 : INPUT "Menge:",Menge
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
studio



Anmeldungsdatum: 08.08.2005
Beiträge: 34

BeitragVerfasst am: 22.08.2005, 11:50    Titel: Antworten mit Zitat

Hallo!

Erst einmal vielen Dank für Eure schnellen Antworten.
Bisdato habe ich mich für die Variante von Dusky_Joe entschieden.

Tomtitom Deine Variante funktioniert bei mir nicht ganz wie gewünscht.
Du hast eigentlich die entscheidende Abkürzung genannt -> "QB".
Ich verwende hier ein anderes BASIC Derivat -> BHT-Basic (für MDE Geräte).
Einge QB-Befehle gibt es erst garnicht und andere funktionieren ganz anders.
In meinem Fall bekomme ich eine "Syntax Error"-Meldung, wenn ich Menge ohne "$" angebe.

Vielen Dank Euch beiden für Eure Hilfe.

Gruß
studio
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 22.08.2005, 14:31    Titel: Antworten mit Zitat

Was muss ich da sehen? Ein GOTO??? durchgeknallt

Das geht auch ohne:
Code:

INPUT "Menge --> ", Menge$

FOR i = 0 TO 255 STEP 1
  IF i = 48 THEN i = 58
  IF INSTR(Menge$, Chr$(i)) Then Print "Fehler": EXIT FOR
NEXT

....


jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 23.08.2005, 21:13    Titel: Antworten mit Zitat

Herrje, wieder einer von den Stil-Aposteln zwinkern
Natürlich hast du recht, und im Endeffekt wäre es sogar um ein paar Takte schneller, aber... soooo unpraktisch ist Goto ja auch nicht, zumindest solange das Label im selben Bildschirmausschnitt ist und dort die einzige ist zwinkern

However, studio: Passe deinen Code nach jb's Vorschlag an, und vor allem: Steig auf freeBASIC um!
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 23.08.2005, 21:15    Titel: Antworten mit Zitat

Dusky_Joe hat Folgendes geschrieben:

Herrje, wieder einer von den Stil-Aposteln

Danke für die Blumen grinsen

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
studio



Anmeldungsdatum: 08.08.2005
Beiträge: 34

BeitragVerfasst am: 24.08.2005, 11:37    Titel: Antworten mit Zitat

Hallo!

Zitat:
Steig auf freeBASIC um!

Vielen Dank für die Aufforderung ... leider ist es zur Zeit nicht möglich.
Das lustige ist eigentlich, dass ich FBIde zum programmieren von BHT-Basic verwende.
Naja solange das Projekt noch läuft werde ich wohl oder übel für dieses Derivat Programme schreiben.
Auf der anderen Seite musst Du es so sehen ... ich hatte vorher (2 Monate) nie etwas mit BASIC am Hut (Komme aus der Skriptwelt -> PHP).
Für mich war die Hardware sowie Software bzw. Programmiersprache neu.

Daher bitte ich Euch auch für die Zukunft etwas um Nachsicht was meine Fragen betreffen.

Gruß
studio

PS: Ich habe meinen Code nach jb's Vorschlag angepasst zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

BeitragVerfasst am: 24.08.2005, 22:31    Titel: Antworten mit Zitat

Normalerweise lagert man solche Tests in Funktionen aus:
Code:
FUNCTION ZahlenString% (Text$)
   FOR i% = 1 to LEN(Text$)
      Zeichen$ = MID%(Text$, i%, 1)
      IF Zeichen$ < "0" OR Zeichen$ > "9" THEN EXIT FUNCTION
   NEXT i%

   ZahlenString% = -1
END FUNCTION


Das Hauptprogramm könnte dann so aussehen:
Code:
LOCATE 2,4 : INPUT "Menge:",Menge$

IF ZahlenString(Wert$) THEN
   Wert% = VAL(Wert$)
ELSE
   BEEP ,,2,0
   LOCATE 2,6 : PRINT "FALSCHE MENGENANGABE"
ENDIF


Eine Weitere Möglichkeit wäre sich eine eigene Eingabe zu basteln die nur Ziffern annimmt:

Code:
DO
   Eingabe$ = INPUT$(1)

   '--- Ziffer wurde eingegeben ---
   IF Eingabe$ >= "0" AND Eingabe$ <= "9" THEN
      Wert$ = Wert$ + Eingabe$
      LOCATE Zeile%, Spalte%
      PRINT Wert$;

   '--- Rücksetzt-Taste wurde gedrückt ---
   ELSEIF Eingabe$ = CHR$(8) AND LEN(Wert$) > 0
      Wert$ = LEFT$(Wert$, LEN(Wert$))
      LOCATE Zeile%, Spalte%
      PRINT Wert$; " ";
   ENDIF

'--- Wenn Enter, dann beenden ---
LOOP UNTIL Eingabe$ = CHR$(13)


Das ist schnell gemacht und eigentlich die eleganteste Lösung.
Man sollte noch erwähnen, daß ich die Codes hier nur mal schnell niedergeschriben habe ohne sie zu testen.


Zuletzt bearbeitet von stef am 27.08.2005, 09:45, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
studio



Anmeldungsdatum: 08.08.2005
Beiträge: 34

BeitragVerfasst am: 25.08.2005, 11:42    Titel: Antworten mit Zitat

Hallo stef,

vielen Dank für Deinen Vorschlag. Ich finde die Idee die Prüfung in eine
Funktion auszulagern sehr interessant und werde meinen Code entsprechend
anpassen und somit wird das Ganze auch etwas übersichtlicher.

Vielen Dank an alle .... und bis demnächst.

Gruß
studio
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 25.08.2005, 13:29    Titel: Antworten mit Zitat

Hallo

Der Vorschlag gleich von vornherein nur Zahlentasten zuzulassen hatte ich ja ganz ähnlich schon im anderen, fast gleichlautenden Thread gemacht. Vielleicht hätte man den ja auch einfach weiterführen können...

Aber zur Sache - im Sinne der Benutzerfreundlichkeit finde ich die Lösung, die Eingabe nach dem dritten Zeichen automatisch zu beenden, dann die Prüfung vorzunehmen und gegebenenfalls eine neue Eingabe zu fordern nicht besonders gut. Wenn die MDE zur Inventur eingesetzt wird, kommt es ja nicht zuletzt auf Geschwindigkeit an.

Als erstes sollte durch eine Bestätigung wie ENTER o.ä. die Eingabe abgeschlossen werden. So könnten ein- und zweistellige Zahlen ohne führende Nullen eingegeben werden. Zum anderen wäre eine Korrektur über eine BackSpace-Taste, die ebenfalls eingebaut werden sollte, auch bei der dritten Zahl möglich. Eine solche Korrekturmöglichkeit sollte dem Nutzer gegeben werden, damit er gleich reagieren kann, wenn er merkt, dass er sich vertippt hat. So kann man sich eine umständliche Löschprozedur im Anschluss sparen.

Gibt es irgendwo eine Liste dieser BHT-Basicbefehle wo evtl. auch die Unterschiede zu QBasic aufgeführt sind? Das wäre beim erstellen konkreter Lösungsvorschläge sehr hilfreich.

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
studio



Anmeldungsdatum: 08.08.2005
Beiträge: 34

BeitragVerfasst am: 25.08.2005, 14:42    Titel: Antworten mit Zitat

Hallo!

Eine Übersicht der Befehle findet man unter folgender URL:
http://www.denso-id.de/
-> Products -> Downloads -> "Choose a category" -> "Programmers Manual" -> BHT-8000 Programmers Manual

Chapter14 Statement Reference
Chapter15 Function Reference

Gruß
studio
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ZaPPa



Anmeldungsdatum: 29.09.2004
Beiträge: 98
Wohnort: Wuppertal

BeitragVerfasst am: 04.09.2005, 15:47    Titel: Antworten mit Zitat

ehm laut programmers manual sollte ' INPUT "Blubb";Zahl% ' aber funktionieren oder nich?
_________________
--- ICH BIN DAGEGEN! ---
Jet_X hat Folgendes geschrieben:
Es währe mir sehr geholfen wenn ihr mir Helfen könnt !


And remember: Schwund is immer!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 10.09.2005, 18:39    Titel: Stringwert auf Integerwert prüfen Antworten mit Zitat

Hi AlleMann,
@studio:
Du kannst es dir aber auch einfacher machen:
Code:
Input "Eine IntegerZahl eingeben";Menge$
If Menge$="" Then ?"So war das aber nicht gemeint.."
Chk$=Str$(Val(Menge$))
If Len(Chk$)<>Len(Menge$) Then ?"Ungültiger numerischer Wert.."
If Instr(Menge$, ".")<>0 Then ?"Das ist aber keine IntegerZahl.."
Die If-Abfragen mußte denn nur durch geeignete Maßnahmen ersetzen, zum Spielen reicht das aber erstmal aus..
Val(Menge$) berechnet eh nur den numerischen Teil von Menge$
Str$(..) macht wieder einen String daraus
Stimmen die Längen nicht überein, wars auch keine richtige Zahl..
Es ist nur 'blöd', daß &H, &O &B hier nicht funktionieren..
..vllt aber auch ganz gut so zwinkern
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 11.09.2005, 13:00    Titel: Antworten mit Zitat

Code:
INPUT "Dezimalzahl eingeben: ", dez%
hexa$ = HEX$(dez%)
PRINT "...in Hex: &H"; hexa$
dez%=0 'Weg ist die Dezimalzahl!
PRINT "Zurückumwandeln: "; LTRIM$(STR$(VAL("&H"+hexa$)))
PRINT "Siehe da, &H funzt wunderbar! happy"
SLEEP:END

_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 14.09.2005, 19:54    Titel: Vielleicht hilft folgender Entwurf für die QB-MonsterFAQ Antworten mit Zitat

Der folgende Artikel-Entwurf für die QB-MosterFAQ zeigt, wie man das Gewünschte prinzipiell machen kann:

-------------------------------------------------------------------------------------

Frage:
--------
Wie ermögliche ich eine Zahleneingabe mit Komma statt Dezimalpunkt?

(( Gleich nach diesem Beitrag steht eine Möglichkeit zur Anzeige von Zahlen mit
Komma ))


Wenn man über INPUT eine Zahl in eine Variable eingeben will, zum Beispiel INPUT
"Eine Zahl:";zahl", und man gibt eine Zahl mit Komma ein, etwa 1,2 , dann gibt
QB sofort eine Meldung aus, dass man die Eingabe wiederholen soll. Man muss die
Zahl mit einem Dezimalpunkt statt einem Komma eingeben. Das ist für
deutschsprachige Benutzer ungewohnt. Wie kann man nun eine Komma-Zahl, ohne dass
eine Fehlermeldung erscheint, gleich nach der Eingabe in eine Zahl gemäß QB-
Konventionen (mit Dezimalpunkt) umwandeln, so dass man auch Zahlen mit Komma
eingeben kann?



Antwort 2
~~~~~~~~~~
[ von Stefan ( mailto:stef_0815@web.de )im QB-Forum, 5.3.2004 ]

Wenn mehrere Variablen eingegeben werden sollen, dann kann man dies tun indem
man sie durch ein Komma trennt. Wenn Du schreibst 7,5 dann wird 7 in der ersten
und 5 in der zweiten Variable abgespeichert. Da Dein Programm aber nur eine
Variable erwartet kommt es zu diesem Fehler.

Am besten Du machst Die Eingabe mit Hilfe von INKEY$ statt INPUT gemäß meinem
folgenden Programm:.


    '************************************************************
    ' KOMMAINP.BAS = Zahleneingabe mit Komma statt Dezimalpunkt
    ' ============
    ' Dieses QBasic-Programm gestattet eine Eingabe von Zahlen
    ' mit Komma statt Dezimalpunkt.
    '
    ' Funktionsweise:
    ' Mit INKEY$ wird ermittelt welche Taste gedrueckt worden
    ' ist. Wenn keine Taste gedrueckt wurde, dann wird ein
    ' Leerstring uebergeben. Die eingetippten Textzeichen werden
    ' wie folgt zu einem String zusammengebaut: Mit SELECT CASE
    ' wird ausgewertet, was gedrueckt worden ist, und
    ' dementsprechend die Textvariable veraendert. Ein Komma
    ' wird sofort in einen Dezimalpunkt umgewandelt. Mit der
    ' Backspace-Taste ist ein Editieren des Eingabewerts moeglich
    ' Sobald Enter gedrueckt wurde, wird die Schleife
    ' verlassen. Danach muss noch der Text mit VAL in eine Zahl
    ' gewandelt werden.
    '
    ' Momentan wird der Text am Anfang der 2. Bildschirmzeile
    ' ausgegeben. Man muesste natuerlich die Locate-Befehle
    ' entsprechend abaendern um die Anzeige an einer anderen
    ' Stelle zu platzieren
    '
    ' (c) Stefab ( stef_0815@web.de ), 5.3.04
    '************************************************************
    '
    DIM text AS STRING
    DIM Eing AS STRING
    CLS
    '
    PRINT "Gib eine Zahl mit Komma ein";
    LOCATE 2, 1, 1 'Cursor anzeigen
    DO
    Eing = INKEY$
    '
    SELECT CASE Eing
    '--- Ziffer ---
    CASE "0" TO "9", "d", "D", "e", "E", "-"
    text = text + Eing
    LOCATE 2, 1
    PRINT text;
    LOCATE , , 1 'Cursor anzeigen
    '
    '--- Komma ---
    CASE ".", ","
    text = text + "."
    LOCATE 2, 1
    PRINT text;
    LOCATE , , 1 'Cursor anzeigen
    '
    '--- Ruecksetztaste (Backspace) ---
    'loescht das letzte Zeichen
    CASE CHR$(8)
    IF LEN(text) THEN
    text = LEFT$(text, LEN(text) - 1)
    LOCATE 2, 1
    PRINT text + " ";
    LOCATE , POS(0) - 1, 1 'Cursor anzeigen
    END IF
    END SELECT
    '
    LOOP UNTIL Eing = CHR$(13)
    '--- Schleife verlassen, wenn Enter gedrueckt worden ist ---
    variable = VAL(text) 'String in numerischen Zahlenwert wandeln
    PRINT
    PRINT
    PRINT variable


(( KOMMAINP.BAS bereits in /progs/neu/ ))

-------------------------------------------------------------------------------------
_________________
+++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz