Frage deutsch
~~~~~~~~~~~~
Wie kann ich eine kleine Datei anlegen und rücklesen?
 

Question English
~~~~~~~~~~~~~~
How to save some data in a file and read it back again?
 

Antwort 1
~~~~~~~~~~
[ von Thomas Antoni, 16.5.2002 ]
.
Das geht am bequemsten mit einer sogenannten "sequentiellen Datei". Kümmere Dich vorerst nicht um diesen Fachausdruck. Dieser und die anderen zur Verfügung stehenden Dateiarten werden detailliert in dem Beitrag "Welche Dateiart soll ich für meine Anwendung wählen?" erläutert.
 
Mein untenstehendes kleine Demoprogramm SEQFILE.BAS zeigt, wie einfach das geht:
Zunächst wird durch den OPEN-Befehl eine Datei TEST.DAT eingerichtet und für das Schreiben (vom Programm aus gesehen in "OUTPUT" -Richtung) geöffnet. Als erste offene Datei erhält sie die Nummer "#1".
Durch die Befehle "WRITE #1, ..." erfolgt das Schreiben der Daten in die Datei.
Zum Abschließen der Schreibaktionen wird die Datei mit dem CLOSE-Befehl geschlossen.
Für das Lesen der abgespeicherten Informationen wird die Datei wieder per OPEN-Befehl geöffnet, diesmal aber zum Lesen ("INPUT" für das Programm)
Mit den INPUT #1 - Befehl werden die Datei-Inhalte Datensatz für Datensatz (sequentiell) in Variable eingelesen.
 
*** Demoprogramm SEQFILE.BAS zur Bearbeitung einer sequentiellen Datei
 
'****************************************************************************
' SEQFILE.BAS - Demonstration der Bearbeitung einer sequentiellen Datei
' ===========
' Dieses kleine Demoprogramm zeigt, wie man einfach und bequem in QBasic
' Daten in eine sequentielle Datei abspeichern und wieder zuruecklesen
' kann:
' - Zunaechst werden 2 Adressen abgefragt
' - Diese werden dann in die kleine sequentielle Datei "test.dat" eingetragen
' - Anschliessend werden diese 2 "Datensaetze" aus der Datei zurueckgelesen
' und in einzeiliger Darstellung auf dem Bildschirm angezeigt.
' Die Datei c:\test.dat muss von Hand geloescht werden
'
' (c) Thomas Antoni, 16.5.2002 --- thomas*antonis.de
'****************************************************************************
CLS
OPEN "c:\test.dat" FOR OUTPUT AS #1
FOR I = 1 TO 2
PRINT "Entry of Data Set "; I
INPUT "Name.... "; NAM$
INPUT "City.... "; CITY$
INPUT "Age..... "; AGE
INPUT "Phone... "; PHONE$
WRITE #1, NAM$
WRITE #1, CITY$
WRITE #1, AGE
WRITE #1, PHONE$
NEXT
CLS
CLOSE #1
OPEN "c:\test.dat" FOR INPUT AS #1
FOR I = 1 TO 2
INPUT #1, NAM$
INPUT #1, CITY$
INPUT #1, AGE
INPUT #1, PHONE$
PRINT I; NAM$; " "; CITY$; AGE; PHONE$
NEXT
CLOSE #1
SLEEP
END
 
Das obige Programm steht im Verzeichnis Progs\ zur Verfügung sowie online unter www.antonis.de/faq/progs/seqfile.bas .
 
 

Antwort 2
~~~~~~~~~
[ von NicTheQuck im QB-Forum, 8.5.2002 ]
.
So öffnet man eine Datei:
OPEN Datei$ FOR INPUT AS #1
 
So liest man die aktuelle Zeile in eine Variable:
LINE INPUT #1, Zeile$
 
Wenn man "LINE INPUT" nochmal ausführt, wird in der Variablen die nächste Zeile gespeichert
 
So öffnet man eine Datei zum Schreiben. Dabei wird, falls die Datei schon vorhanden ist, alles in der Datei gelöscht und ggf. überschrieben:
OPEN Datei$ FOR OUTPUT AS #1
 
So schreibt man eine Zeile in die geöffnete Datei:
PRINT #1, "Hallo, das ist die erste Zeile"
PRINT #2, "Dieser Text steht in der zweiten Zeile"
 
Wenn du schreibst...
OPEN Datei$ FOR APPEND AS #1
 
...wird alles, was du nachher mit "PRINT #1, ..." schreibst, an die Datei angehängt!
Und so schließt die die Datei wieder:
CLOSE #1
 
Statt #1 kannst du auch andere Zahlen benutzen. Du musst z.B. #2 schreiben, wenn du bereits eine Datei geöffnet hast, die die Nummer #1 hat!
 
 
 
 
Antwort 3
~~~~~~~~
[ von Triton (
www.silizium-net.de ) im QB-Forum, 23.10.2002 ]
.
so geht dat... ( Triton | 18:44:24 | 23.10.2002 )
 

Wie speichere/lade ich etwas in/aus einer Datei?

Aus der QB-FAQ auf www.silizium-net.de
 
Im Grunde läuft das Einlesen/Schreiben in/aus eine Datei syntaxmäßig immer nach diesem Prinzip ab:
 
OPEN Datei FOR Modus AS #Dateinummer
PRINT/INPUT #1, text$/variable%
CLOSE
 
Um das Abspeichern in eine Datei zu demonstrieren, wollen wir einfach mal die Zahlen von 1-10 untereinander in eine Datei schreiben:
 
OPEN "c:\tmp.txt" FOR OUTPUT AS #1
'Datei tmp.txt in Laufwerk C: zum Schreiben oeffnen
FOR zahl% = 1 to 10
PRINT #1, zahl% 'Zahl in Datei eintragen
NEXT
CLOSE
 
 
Wie Du Dich mit einem beliebigen Editor überzeugen kannst, hat die Datei C:\txt.tmp jetzt folgenden Inhalt:
1
2
3
4
5
6
7
8
9
10
 
Mit dem folgenden Code kannst Du die Datei wuieder einlesen und die Zahlenin einer Schleife nacheinander anzeigen:
 
OPEN "c:\tmp.txt" FOR INPUT AS #1
'Datei zum Lesen oeffnen
DO
INPUT #1, zahl% 'Zahl einlesen
PRINT zahl%
LOOP UNTIL EOF(1) 'Schleife bis Dateiende erreicht
CLOSE
 
Lösche anschließend die Datei c:\tmp.txt von Hand oder von Deinem Programm aus mit
 
KILL "c:\tmp.txt"
 
Mit zahl% kann man dann umgehen wie mit jeder anderen Variablen auch. Damit Du nicht nur den letzten Wert von zahl% erhältst, musst Du schon in der Schleife etwas mit den Werten anfangen, also in ein Array speichern, auf den Bildschirm bringen usw.
 
 
 

Answer 4
~~~~~~~~
How do I save to a file?
 
This is a somewhat broad questio, however, here goes. Basically speaking, there are several ways to get data to a file, using QB. These include the text data commands (WRITE #, PRINT #), binary commands (PUT #), and BSAVE. I highly suggest looking these up in the qbasic help file, it's pretty good about these things. You open up a file with the OPEN command, for the text and binary methods. You write data to the file, then you CLOSE it. BSAVEing will take large (or small) amounts of data from a designated place (memory sections), and turn it into a file (ie, saving the screen to a file, or a variable [including images]). BLOAD loads it. QBasic help is pretty good about explaining these, or look around
somewhere for tutorials.
 
 

[ The QBasic-MonsterFAQ --- Start Page: www.antonis.de/faq ]