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:

WICHTIGE Frage, zu einer Schleife

 
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
pfiffikus_86



Anmeldungsdatum: 10.11.2004
Beiträge: 11

BeitragVerfasst am: 07.01.2005, 18:11    Titel: WICHTIGE Frage, zu einer Schleife Antworten mit Zitat

Hallo, hab mal ne Wichtige Frage.
Und zwar will ich eine Schleife programmieren, die eine Variable auf zwei Variablen aufteilt.
Diese genannte Variable kann wie folgt aussehen, variable1$ = "" oder variable1$ = "/SPIEL " oder variable1$ = "/SPIEL /RESET ".
Die Aufgabe der Schleife soll nun darin bestehen, zu erkennen, ob in der Variable variable1$ ein "/" auftaucht, und falls ja, soll sie alle Bytes hinter dem "/", bis zum nächsten " " (Leerzeichen) in die Variable namens variable2$ eintragen. Allerdings, und jetzt wird’s schwierig, nur wenn in der variable1$ das zweite mal ein "/" vorkommt, sollen die dahinter liegenden Bytes in die variabel2$ geschrieben werden. Bitte helft mir!

Es wäre klasse wenn mir jemand gleich eine kleine Routine programmieren könnte, Danke! zwinkern
_________________
Ich programmiere lieber, als aufs Klo zu gehen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 07.01.2005, 18:29    Titel: Antworten mit Zitat

na das ist ja so eine richtig wichtige Frage, die bestimmt jeden interessiert, der mit QB arbeitet mit den Augen rollen

also ich geb dir mal ein paar wichtige Schlagworte, damit kannst du es bestimmt selbst lösen, denn es macht doch mehr Spaß die Lösung selbst zu finden, als sich von den anderen alles vorgeben zu lassen.

mit
Code:
a$ = MID$(variable1$, x, 1)

fragst du ein Zeichen im String 'variable1$' an Stelle x ab
Dann kannst du z.B. mit
Code:
IF a$ = "/" THEN EXIT DO
deine Do - Loop schleife beenden.

So die Schleife und die If-Abfrage müsstest du ja wohl hinkriegen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 07.01.2005, 21:35    Titel: Antworten mit Zitat

Was Du suchst, ist eine split()-Funktion, in PHP auch als explode() bekannt. Siehe dazu das fertige Beispiel

http://beilagen.dreael.ch/QB/SPLIT.BAS

Das zweite Argument bei der SUB-Prozedur ist bei Dir einfach "/" anstelle von " ".
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dusky_Joe



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

BeitragVerfasst am: 09.01.2005, 22:21    Titel: Antworten mit Zitat

Ich will dann auch mal ein paar Code-Fragmente loswerden cool

Code:

number = 0
l = LEN(v$)
FOR checkbyte% = 1 TO l
 IF MID$(v$, checkbyte%, 1) = "/" THEN number = number + 1
NEXT

DIM VArrey (1 TO number) AS STRING

number = 1

FOR checkbyte% = 1 TO l
 tmp$=MID$(v$, checkbyte%, 1)
 IF tmp$ = "/" THEN
  number = number + 1
 ELSE
  VArrey(number) = VArrey(number) + tmp$
 END IF
NEXT


....
Ich denke, das sollte funktionieren.

Der String wird zwar auf ein Arrey aufgeteilt, und nicht auf einzelne Variablen, aber so wie du dein Problem beschrieben hast, ist das sowiso besser, weil du anscheinend nicht genau festlegen kannst, wie viele einzelne Variablen es einmal werden sollen.... oder?

naja, viel glück mit dem Code!

ciao!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ZaPPa



Anmeldungsdatum: 29.09.2004
Beiträge: 98
Wohnort: Wuppertal

BeitragVerfasst am: 09.01.2005, 23:42    Titel: Antworten mit Zitat

@Duskey_Joe
[Klugscheißmode ON]
Es heißt "Array" nich "Arrey" Zunge rausstrecken
[Klugscheißmode OFF]

Jah Bless!

ZaPPa
_________________
--- 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
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 10.01.2005, 15:18    Titel: Antworten mit Zitat

ZaPPa hat Folgendes geschrieben:
@Duskey_Joe
[Klugscheißmode ON]
Es heißt "Array" nich "Arrey" Zunge rausstrecken
[Klugscheißmode OFF]

Jah Bless!

ZaPPa


Es hieße auch sowieso, aber das interessiert keinen zwinkern
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 10.01.2005, 16:17    Titel: Antworten mit Zitat

Hallo, ich bin neu hier. Ich habe lange QB geproggt, bis BlitzBasic kam. Bin aber nie tiefer in QB eingestiegen. Und nun schreibe ich nach langer QB-Abstinenz meinen ersten Thread und nehme am Programmierwettbewerb teil zwinkern

Aber zurück zur Frage: Kennt keiner von euch den INSTR-Befehl. Am Anfang wurde gesagt, du soltlest die Lösung selber herausfinden. Also tu das grinsen
Jedenfalls lege ich dir ans Herz, in der QuickBasic-Hilfe oder sonst wo unter
INSTR zur suchen.

Das wars auch schon
By
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 10.01.2005, 16:22    Titel: Antworten mit Zitat

Ich würde INSTR nicht benutzen.

Denn das setzt vorraus, dass entweder im String "/" auch vorkommt, oder, dass man einen entsprechenden Fehlerbehandler schreibt (ON ERROR GOTO).

Da muss man dann wieder prüfen, ob wirklich kein "/" vorhanden ist, oder aber nur eins (wenn man 2 Parameter erlauben möchte)
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 11.01.2005, 17:37    Titel: Antworten mit Zitat

Das mit dem Error wusste ich nicht. Und wenn kein Backslash"/" im String vorkommt, gibt INSTR doch auch 0 zurück.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 11.01.2005, 17:41    Titel: Antworten mit Zitat

Jetzt kommt noch ein wenig Code:

input eingabe$
if instr(eingabe$, "/SPIEL") > 0 then v1$ = "/SPIEL"
if instr(eingabe$, "/RESET") > 0 then v2$ = "/RESET"

So oder so ähnlich stelle ich mir das vor. Da wird dann gar keine Schleife mehr nötig grinsen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 11.01.2005, 18:18    Titel: Antworten mit Zitat

Oh, ich habs grade ausprobiert, INSTR liefert dann in der Tat 0!

Mein Fehler trat beim Problem auf, in dem es um die HTML-Tags ging, wahrscheinlich kam irgendeine Funktion nicht mit Null als Wert klar. verwundert
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
helium



Anmeldungsdatum: 10.09.2004
Beiträge: 397
Wohnort: Leverkusen

BeitragVerfasst am: 11.01.2005, 20:44    Titel: Antworten mit Zitat

Zitat:
Es wäre klasse wenn mir jemand gleich eine kleine Routine programmieren könnte, Danke!

Willst du das wirklich, oder willst du es doch lieber mal selbst versuchen?


Zitat:
Und zwar will ich eine Schleife programmieren, die eine Variable auf zwei Variablen aufteilt.

So ein Ansatz ist in der Regel nicht gut. Denk erstmal nicht daran, dass du eine Schleife haben willst. Das lenkt dich gleich viel zu fest in eine Richtung. Denk erstmal nur über die eigentliche Aufgabenstellung und überhaupt nicht über die Implementierung nach. Wenn du die komplett hast, dann kann man sich viel leichter darüber klar werden, welche Sprachmittel dazu geeignet sind.

Zitat:

Diese genannte Variable kann wie folgt aussehen, variable1$ = "" oder variable1$ = "/SPIEL " oder variable1$ = "/SPIEL /RESET ".
Die Aufgabe der Schleife soll nun darin bestehen, zu erkennen, ob in der Variable variable1$ ein "/" auftaucht, und falls ja, soll sie alle Bytes hinter dem "/", bis zum nächsten " " (Leerzeichen) in die Variable namens variable2$ eintragen. Allerdings, und jetzt wird’s schwierig, nur wenn in der variable1$ das zweite mal ein "/" vorkommt, sollen die dahinter liegenden Bytes in die variabel2$ geschrieben werden. Bitte helft mir!


Also versuchen wir doch mal die einzelnen Punkte heraus zu kristalisieren:
1.) letzten Slash im String finden.
2.) Leerzeichen hinter einer bestimmten Position finden (da passt INSTR() perfekt)
3.) aus den beiden gefundenen Stellen einen Substrung Bilden (da passt Mid$() perfekt).

Punkt 2 und 3 sind also schon erledigt. Bleibt noch Punkt 1. Bau dir eine Funktion die genau das macht. (Du kannst sie auch direkt so allgemein bauen, das sie nicht nach einem Slash sucht, sondern nach einem beliebigen übergebenen Zeichen, aber das hängt davon ab, wie viel du dir schon zutraust.)

Also: mit INSTR die erste Position des Slahs bestimmen. Dann in einer Schleife von dieser Position an solange weiter nach Slashes suchen, bis eine 0 kommt. Dann die [b]zuvor[/] gefundene Position zurückgeben.
_________________
Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 12.01.2005, 11:18    Titel: Antworten mit Zitat

Helium hat Recht. Du solltest dir erst Gedanken machen, WAS du erreichen willst. Später stellt sich dann die Frage, WIE du es erreichen kannst.

Wahrscheinlich willst du so etwas wie einen Konsolenbefehl schreiben. Wenn man "/RESET" eingibt, soll etwas bestimmtes passieren und wenn man "/CHEATS" oder "/START" oder sonst was eingibt, soll irgendwas entsprechendes passieren.

Wenn also die Reihenfolge egal, was du als erstes eingibst, reicht es, wie schonmanl von mir gepostet, mit INSTR diese Sachen abzufragen.

Code-Fragment:

INPUT eingabe$
eingabe$ = UCASE$(eingabe$) 'Mache alle Buchstaben zu Großbuchstaben
IF INSTR(eingabe$ , "/START") THEN
LEVEL = 1
END IF
IF INSTR(eingabe$, "/CHEATS") THEN
leben = 99
munition = 1000
geld = 10000
END IF
IF INSTR(eingabe$, "/RESET") THEN
leben = 3
munition = 10
geld = 450
END IF

Wenn der Spieler jetzt eingibt: "/START /CHEATS", dann wird der erste und der zweite IF-Block ausgeführt. Genausogut kann aber auch nur der dritte oder alle oder ... oder gar keiner ausgefürht werden.
Alles klar? zwinkern [/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 12.01.2005, 15:37    Titel: Antworten mit Zitat

Oder du machst es mit Batch (muhaha, gestern das erste Mal angeschaut zwinkern )

Du kannst zB. eine Datei SPIEL.BAT nennen, in die du folgende eingibst:
Code:
@Echo off

Echo.%1>>para.txt
Echo.%2>>para.txt
Echo.%3>>para.txt
Echo.%4>>para.txt
Echo.%5>>para.txt
Echo.%6>>para.txt
Echo.%7>>para.txt
Echo.%8>>para.txt
Echo.%9>>para.txt
(oder so, da ich das weder gut kann, noch jetzt ausprobieren möchte, soll es, falls nötig, jemand verbessern!)

Dann könntest du in BASIC halt
Code:
INPUT "Parameter: ", par$
SHELL "SPIEL "; par$

OPEN "para.txt" FOR INPUT AS #1
  DO WHILE NOT EOF(1)
    LINE INPUT #1, parameter$(y% + 1)
    y% = y% + 1
  LOOP
CLOSE #1


Ich weiß aber nicht, inwiefern es einfacher geht, aber ich hoffe mal, dass das funktioniert! lächeln
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 12.01.2005, 20:43    Titel: Kommandozeilenargument-Auswertung Antworten mit Zitat

Bekanntlich dient dafür COMMAND$ (nur Compiler-Version, d.h. nicht beim zu MS-DOS 6.22 beigelegten QBASIC.EXE möglich). Hatte früher einmal ein nettes Demo geschrieben. Siehe

http://beilagen.dreael.ch/QB/ARG_PARS.BAS

Im Detail beschrieben hatte ich das Ganze seinerzeit im Usenet unter

http://groups.google.com/groups?selm=96et38%24560%241%40news1.sunrise.ch
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
pfiffikus_86



Anmeldungsdatum: 10.11.2004
Beiträge: 11

BeitragVerfasst am: 14.01.2005, 19:49    Titel: Antwort Antworten mit Zitat

Hi, sorry das ich mich jetzt erst melde, hatte leider keine Zeit.
Erst mal vielen Dank für die vielen Antworten happy, echt klasse.

Ich hab noch ein wenig programmiert und gebastelt, bis es dann endlich klappte. Ihr hattet schon recht, dass ich eine COMMAND$ einlesen wollte, da diese allerdings äußerst flexibel ist, stellte sich die Programmierung als recht schwierig heraus.

Nun klappt aber alles, und ich bedanke mich!!! zwinkern
_________________
Ich programmiere lieber, als aufs Klo zu gehen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
helium



Anmeldungsdatum: 10.09.2004
Beiträge: 397
Wohnort: Leverkusen

BeitragVerfasst am: 14.01.2005, 21:17    Titel: Antworten mit Zitat

hmm, jetzt mal eben aus dem Kopf:

Code:

SUB ExtractFromSlashToSpace (source AS STRING, result() AS STRING)
   DIM currentIndex AS INTEGER
   DIM slashPos AS INTEGER
   slashPos = INSTR(source, "/")

   DIM spacePos AS INTEGER

   DO WHILE (slashPos <> 0)
      spacePos = INSTR(slashPos, source, " ")
      IF spacePos = 0 THEN
         result(currentIndex) = MID$(source, slashPos)
         EXIT SUB
      END IF

      result(currentIndex) = MID$(source, slashPos, spacePos - slashPos)

      slashPos = INSTR(spacePos + 1, source, "/")

      currentIndex = currentIndex + 1
   LOOP

END SUB


Verwenden würde man es so:

Code:

DIM testResult(10) AS STRING

ExtractFromSlashToSpace COMMAND$, testResult()

FOR i = 0 TO UBOUND(testResult)
   PRINT testResult(i)
NEXT


Bei
"uninteressant /toll /super /wahnsinn auch nicht wichtig"

sollte
/TOLL
/SUPER
/WAHNSINN
rauskommen.
_________________
Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 14.01.2005, 21:21    Titel: Re: Antwort Antworten mit Zitat

pfiffikus_86 hat Folgendes geschrieben:
Nun klappt aber alles, und ich bedanke mich!!! zwinkern


Die Mühe hast du dir anscheinend umsonst gemacht grinsen
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
helium



Anmeldungsdatum: 10.09.2004
Beiträge: 397
Wohnort: Leverkusen

BeitragVerfasst am: 14.01.2005, 21:30    Titel: Antworten mit Zitat

Ja, aber er kann ja vergleichen, zeigen, was er anders gemacht hat. Da er ordentlich drüber nachgedacht hat, hat seine Lösung vielleicht auch vorteile, die er hier den anderen zeigen kann.
Meine Lösung ist ja nur mal eben in fünf Minuten so dahinprogrammiert.
_________________
Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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