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.