Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 22.10.2006, 12:33 Titel: Existenzüberprüfung |
|
|
Hallo,
ich würder gerne wissen, wie es möglich ist zu überprüfen, ob eine .dat Datei existiert oder nicht.
Ich kann mit meinem Program den momentanen stand in einer .dat Datei abspeichern.
Code: |
INPUT "Unter welchem Namen abspeichern? ", datname$
OPEN "o", #1, datname$ + ".dat" 'Datei anlegen
FOR y = 1 TO 9 'Werte eintragen
FOR x = 1 TO 9
IF x < 9 THEN PRINT #1, v(x, y).zahl, v(x, y).farbe, v(x, y).fest;
IF x = 9 THEN PRINT #1, v(x, y).zahl, v(x, y).farbe, v(x, y).fest
NEXT x
NEXT y
CLOSE #1
|
und dann kann man diese Datei auch wieder öffenen.
Code: |
INPUT "Name der zu öffnenden Datei? ", datname$
OPEN "i", #1, datname$ + ".dat"
FOR y = 1 TO 9
FOR x = 1 TO 9
INPUT #1, zahl, farbe, fest
v(x, y).zahl = zahl
v(x, y).farbe = farbe
v(x, y).fest = fest
NEXT x
NEXT y
CLOSE #1
|
Allerdings kann es ja sein, dass der Dateiname falsch ist oder, dass es die Datei garnicht gibt und dann kommt natürlich eine Fehlermedung( ), was ich verhindern möchte.
Gruß,
Dark_King
PS: wer sich für den aktuellen Stand von meinem Sudoku Program interessiert kann sich hier die aktuellste Version runterladen. _________________
 |
|
Nach oben |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 22.10.2006, 12:48 Titel: |
|
|
Zitat: | Existenzüberprüfung |
"Ich denke also bin ich" - SCRN.
was du brauchst ist (in qbasic) eine lösung mit "on error gosub meinefehlerbehandlungsroutine" (schau einfach in der referenz nach), in freebasic kann man das viel eleganter machen, da sich open auch als funktion verwenden lässt, die dann ne erfolgs- oder misserfolgsmeldung zurückgibt.
Gruß
Lutz Ifer _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
Elvis

Anmeldungsdatum: 01.06.2006 Beiträge: 818 Wohnort: Deutschland, BW
|
Verfasst am: 22.10.2006, 13:22 Titel: |
|
|
Du kannst auch mit dir den Verzeichnis-Inhalt auslesen, und dann halt
überprüfen, ob die Datei, die du suchst, enthalten ist...
Sebastian (oder wars jemand anderes?) hat letztens zu dir auch noch eine
elegantere Lösung vorgestellt, als die, die normalerweise verwendet wird.
Ich guck noch mal...
Das mit ON ERROR ist aber einfacher...
Grüße, Elvis _________________ Geforce 7300GT (256MB GDDR3, Gainward) -- 2x 512MB (DDR2 800, MDT) -- AMD Athlon64 X2 EE 3800+ -- Asrock ALiveNF5-eSATA2+ |
|
Nach oben |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 22.10.2006, 13:38 Titel: |
|
|
hmm irgendwas stimmt da net, wenn ich "ON ERROR GOTO Marke" schreibe, kann ich das Programm nicht starten, da immer kommt, dass die Marke nicht definiert ist. Ich weis nicht warum, die Marke ist ja eigentlich definiert.
mfg
Dark_King _________________
 |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 22.10.2006, 13:41 Titel: |
|
|
Dann poste doch mal bitte den ganzen Code.
Bzw. wenn der zu groß ist, den relevanten Ausschnitt.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 22.10.2006, 13:47 Titel: |
|
|
hab ich irgendwie vergessen
Code: | SUB oeffnen
LOCATE 23, 1: COLOR farb1: PRINT "[Name (max 8 Buchstaben), Abbrechen] "
LOCATE 22, 1: INPUT "Name der zu ”ffnenden Datei? ", datname$
IF datname$ = "Abbrechen" THEN
LOCATE 22, 1: COLOR farb1: PRINT " "
LOCATE 23, 1: COLOR farb1: PRINT " "
EXIT SUB
END IF
DO
IF LEN(datname$) > 8 THEN
existenz:
LOCATE 22, 1: COLOR farb1: INPUT "Datei existiert nicht; Neuen Dateinamen eingeben: ", datname$
ELSE
EXIT DO
END IF
LOOP
ON ERROR GOTO existenz
OPEN "i", #1, datname$ + ".dat"
FOR y = 1 TO 9
FOR x = 1 TO 9
INPUT #1, zahl, farbe, fest
v(x, y).zahl = zahl
v(x, y).farbe = farbe
v(x, y).fest = fest
NEXT x
NEXT y
CLOSE #1
CALL startbild
LOCATE 22, 1: COLOR farb1: PRINT "Die Datei "; datname$; ".dat wurde ge”ffnet."
SLEEP 3
LOCATE 22, 1: COLOR farb1: PRINT " "
LOCATE 23, 1: COLOR farb1: PRINT " "
END SUB |
_________________
 |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 22.10.2006, 13:50 Titel: |
|
|
Aja.
Ich glaube, solche On Error-Labels müssen immer im Hauptprogramm definiert sein. Ich hab vor 'ner Ewigkeit mal 'n bissl damit gearbeitet, weiß das also nicht mehr 100%ig. Probier's mal aus.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 22.10.2006, 14:08 Titel: |
|
|
hmm dann kann ich den error ja eigentlich nicht wirklich auf mein sub abstimmen... vllt mit variablen und if...
naja mal ausprobieren
thx für eure antworten
mfg
Dark_King _________________
 |
|
Nach oben |
|
 |
Sebastian Administrator

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

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 22.10.2006, 15:10 Titel: |
|
|
Hmm leider geht das bei v4.5 nicht..
mfg
Dark_King _________________
 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 22.10.2006, 21:49 Titel: |
|
|
Elvis hat Folgendes geschrieben: | Du kannst auch mit dir den Verzeichnis-Inhalt auslesen, und dann halt
überprüfen, ob die Datei, die du suchst, enthalten ist...
Sebastian (oder wars jemand anderes?) hat letztens zu dir auch noch eine
elegantere Lösung vorgestellt, als die, die normalerweise verwendet wird.
Ich guck noch mal...
Das mit ON ERROR ist aber einfacher...
Grüße, Elvis |
das is aber erst seit qb7.1 drin. und die meisten verwenden pds nicht^^ _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
pinkpanther

Anmeldungsdatum: 28.05.2005 Beiträge: 79 Wohnort: Wien
|
Verfasst am: 23.10.2006, 07:13 Titel: |
|
|
Elvis schrieb: Zitat: | Elvis hat Folgendes geschrieben:
Du kannst auch mit dir den Verzeichnis-Inhalt auslesen, und dann halt
überprüfen, ob die Datei, die du suchst, enthalten ist...
Sebastian (oder wars jemand anderes?) hat letztens zu dir auch noch eine
elegantere Lösung vorgestellt, als die, die normalerweise verwendet wird. |
Ich hab mal dazu eine Lösung vorgeschlagen...
http://forum.qbasic.at/viewtopic.php?p=21887&highlight=#21887 _________________ lG
pinkpanther  |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 23.10.2006, 17:06 Titel: |
|
|
wie wärs mit
Code: |
open datei$ for append as #1
dummy=eof(1)
close #1
if dummy then
kill datei$
[WAS SOLL GETAN WERDEN WENN NICHT VORHANDEN]
else
[WAS SOLL GETAN WERDEN WENN VORHANDEN]
endif
|
hat den einen nachteil, dass leere dateien auch als "nicht vorhanden" gewertet werden... _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 23.10.2006, 17:59 Titel: |
|
|
hi, die lösung gefällt mir eigenltich sehr gut, da das mit
irgendwie nur 1 mal funktioniert hat und wenn ich dann nochmal versucht habe eine nicht existierende datei zu öffen das ganze wieder eine fehlermedung ausgab...
ich hab deine lösung mal mit eingebaut aber es kommt immer die meldung "Falscher Dateimodus" bei
weist du was da falsch ist oder könntest du mir die funktion von eof(1) mal erklären, da ich aus der qb hilfe net ganz schlau werde.
mfg
Dark_King _________________
 |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 23.10.2006, 19:26 Titel: |
|
|
Er hat da nur EOF und LOF verwechselt.
EOF gibt 1 zurück, wenn das Ende der Datei erreicht ist - LOF die Länge in Bytes. Wenn die Länge 0 beträgt, kann man davon ausgehen, dass es die Datei nicht gibt, da sie gerade angelegt wurde - aber keine 100%ige Garantie, dass es sie auch nicht gibt. Warum? Es kann ja auch einfach eine leere Datei sein.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 23.10.2006, 19:33 Titel: |
|
|
find ich gut, da ich des schon mal eingebaut habe, da des mit ein wenig logischer erschien
mfg
Dark_King _________________
 |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 25.10.2006, 17:26 Titel: |
|
|
Mao hat Folgendes geschrieben: | Er hat da nur EOF und LOF verwechselt.
EOF gibt 1 zurück, wenn das Ende der Datei erreicht ist - LOF die Länge in Bytes. Wenn die Länge 0 beträgt, kann man davon ausgehen, dass es die Datei nicht gibt, da sie gerade angelegt wurde - aber keine 100%ige Garantie, dass es sie auch nicht gibt. Warum? Es kann ja auch einfach eine leere Datei sein.  |
öha... sorry
das problem dass on error nur einmal geht hab ich auch... des NERVT _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
OdinX

Anmeldungsdatum: 29.07.2005 Beiträge: 253 Wohnort: SG Schweiz
|
Verfasst am: 25.10.2006, 22:30 Titel: |
|
|
wie wärs damit:
Code: | SHELL "CD "+pfad$
SHELL "DIR /A-D > C:\temp.dat"
f=FREEFILE
OPEN "temp.dat" FOR INPUT AS #f
...und so weiter |
|
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 25.10.2006, 23:08 Titel: |
|
|
kleiner_hacker hat Folgendes geschrieben: | das problem dass on error nur einmal geht hab ich auch... des NERVT |
Kann es sein, dass du nicht mit RESUME bzw. RESUME NEXT aus der Fehlerbehandlung zurückkehrst, sondern mit GOTO? _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
|