Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
alfonsospringer
Anmeldungsdatum: 27.04.2006 Beiträge: 445
|
Verfasst am: 18.05.2006, 20:14 Titel: on error goto |
|
|
CLS
anfang:
ON ERROR GOTO fehler
INPUT "Dateiname: ", name$
OPEN name$ FOR INPUT AS 1
DO
INPUT #1, text$
PRINT text$
LOOP UNTIL EOF(1)
fehler:
GOTO anfang:
wenn ich in diesem programm 2x den Namen einer nicht existenten datei angebe, dann wird das Programm beendet - warum? eigentlich sollte es doch immer wieder erneut nach dem namen der Datei fragen, oder ?
Wenn nein wie realisiere ich dies ?
 |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
alfonsospringer
Anmeldungsdatum: 27.04.2006 Beiträge: 445
|
Verfasst am: 18.05.2006, 21:03 Titel: |
|
|
aber dieser code bewirkt doch nicht, dass ich nochmals den aufgefordert werde den dateinamen einzugeben, oder ? Er gibt doch nur die Fehlernummer aus
ich moechte, dass er mich immer wieder nach dem Namen der datei fragt, bis ich einen funktionierenden angebe.
Zuletzt bearbeitet von alfonsospringer am 18.05.2006, 21:06, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
|
Nach oben |
|
 |
alfonsospringer
Anmeldungsdatum: 27.04.2006 Beiträge: 445
|
Verfasst am: 19.05.2006, 15:35 Titel: |
|
|
wenn man in dem Programm 2 mal hintereindander den namen einer nicht exisstenten datei eingibt funktioniert es nicht mehr. Probiert's mal aus |
|
Nach oben |
|
 |
pinkpanther

Anmeldungsdatum: 28.05.2005 Beiträge: 79 Wohnort: Wien
|
Verfasst am: 19.05.2006, 16:16 Titel: |
|
|
Um sicherzustellen, dass auch der nächste Fehler wieder von der Fehlerbehandlungsroutine abgefangen wird, muss man die Fehlerbehandlung mit dem RESUME-Befehl (und nicht mit dem GOTO-Befehl, der diesmal nicht nur aus stilistischen Gründen unangebracht ist) beenden.
Der korrekte Code lautet somit:
Code: | ON ERROR GOTO FEHLER
Anfang:
CLS
INPUT "Dateiname: ", d$
OPEN d$ FOR INPUT AS #1
DO UNTIL EOF(1)
LINE INPUT #1,zeile$
PRINT zeile$
LOOP
CLOSE #1
SLEEP: END
FEHLER:
PRINT "Es ist Fehler Nr. "; LTRIM$(STR$(ERR)); " aufgetreten."
INPUT "Nochmal probieren? ", aw$
IF instr(UCASE$(aw$),"J") THEN RESUME Anfang
END |
_________________ lG
pinkpanther  |
|
Nach oben |
|
 |
alfonsospringer
Anmeldungsdatum: 27.04.2006 Beiträge: 445
|
Verfasst am: 19.05.2006, 19:50 Titel: |
|
|
Im moment habe ich diese etwas unschoene Variante um nach einem Fehler in einem sub den sub nochmal neuu zu starten
Code: | ON ERROR GOTO fehler
CALL menue 'menuesub
END 'ende des Programmes
fehler: 'fehlerroutine
CLS
PRINT "Datei nicht gefunden bitte nochmal versuchen"
RESUME again 'gehe zu again und schalte die fehlerverfolgung wieder ein
again: ' nur dafuer zustaendig den sub neuzustarten nachdem die Fehlerverfolgung wieder aktiv ist
CALL alt' startet den sub neu |
geht das auch schoener ohne die zweite sprungmarke?
Zuletzt bearbeitet von alfonsospringer am 20.05.2006, 09:17, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
pinkpanther

Anmeldungsdatum: 28.05.2005 Beiträge: 79 Wohnort: Wien
|
Verfasst am: 19.05.2006, 20:26 Titel: |
|
|
Am elegantesten löst du dieses Problem, indem du es erst überhaupt nicht zu einem Fehler kommen lässt. Das heißt, du musst erst prüfen, ob es die Datei gibt, bevor du sie mit irgendwelchen Dateibefehlen bearbeitest.
Wie man prüfen kann, ob eine bestimmte Datei existiert, habe ich im folgenden Beitrag beschrieben:
http://forum.qbasic.at/viewtopic.php?p=21887&highlight=#21887 _________________ lG
pinkpanther  |
|
Nach oben |
|
 |
|