6.1; Dateizugriff
Für manche Anwendungszwecke ist der Arbeitsspeicher zur Speicherung von Daten ungeeignet. Beispielsweise wenn Sie Daten auf längere Zeit speichern möchten. (Daten die im Arbeitsspeicher untergebracht werden, gehen spätestens (!) verloren, wenn der Rechner ausgeschaltet wird; Im Normalfall jedoch bereits nach dem Schließen des Programmes) Ein weiteres Problem des Arbeitsspeichers ist, dass von diesem unter Dos nur ein sehr geringer Teil des Speichers zur Verfügung steht. (640 KB) Darum ist der Arbeitsspeicher zur Speicherung großer Datenmengen (wenn auch nur auf die Dauer der Programmlaufzeit) ungeeignet. Abhilfe schafft die Speicherung der Daten auf einen Datenträger. (Festplatte, Diskette, etc.) Es soll an dieser Stelle nicht der Eindruck entstehen, dass die Speicherung auf einem Datenträger generell vorzuziehen ist. Der Arbeitsspeicher bietet eine weitaus höhere Geschwindigkeit als eine Festplatte! (von Disketten gar nicht zu sprechen ...)
Ich möchte an dieser Stelle nur auf das Schreiben und Lesen von Textdateien eingehen, da sie die gängigste Möglichkeit bieten, Dateien zu speichern. Allerdings ist die Verwendungen von Textdateien nicht immer möglich. Nähere Informationen finden Sie wie immer in der Hilfedatei zu Ihrem Compiler/Interpreter. Sie sollten mit Ihrem derzeiten Wissen über Basic imstande sein, aus dieser zu lernen.
Zunächst werden wir eine Textdatei schreiben. (den zu schreibenden Text können Sie selbst bestimmen) Wie das geht zeigt das nächste Beispiel. Im übernächsten Beispiel werden Sie sehen, wie diese Textdatei wieder eingelesen werden kann.
Bevor aus einer Datei gelesen bzw. in eine Datei geschrieben werden kann muss eine solche geöffnet (wenn gelesen werden soll oder in eine bereits vorhandene Datei geschrieben werden soll) bzw. eröffnet (wenn in eine noch nicht vorhandene Datei geschrieben werden kann) werden. Hierfür steht der Befehl OPEN zur Verfügung. Dieser hat folgende Syntax:
OPEN Datei FOR Zugriffsmodus AS Zugriffsbezeichner |
"Datei" bezeichnet den Dateinamen der Datei. (relative oder absolute Angabe; eine relative Angabe wäre zum Beispiel "datei01.txt", das bedeutet, dass diese Datei im aktuellen Verzeichnis liegt; eine absolute Angabe wäre zum Beispiel "C:\qb\datei01.txt") Der Zugriffsmodus gibt an, wie die Datei behandelt werden soll. Hier behandelt werden nur die Modi INPUT (öffnet eine Datei, diese kann nur gelesen werden) und OUTPUT (eröffnet eine Datei bzw. öffnet eine bereits vorhandene; diese kann nur geschrieben werden; existiert die Datei bereits wird sie ohne Warnung überschrieben). Weiters gäbe es noch die Modi APPEND, (fügt einen Text an eine vorhandene Textdatei an; nach dem Öffnen der Textdatei steht der Dateizeiger nach dem bisherigen Inhalt) BINARY (auf Dateien im Binärmodus zugreifen; Sie sollten sich unbedingt dazu die entsprechenden Einträge in der Hilfedatei ansehen!) und RANDOM. (Standardzugriffsmodus) Der "Zugriffsbezeichner" ist im Gegensatz zu anderen Programmiersprachen kein String sondern ein numerischer Bezeichner, also eine Zahl. Üblicherweise nimmt man eine möglichst kleine Zahl, die jedoch nicht negativ sein darf. So würde Beispielsweise die Datei im Verzeichnis "C:\file01.txt" zum Schreiben geöffnet werden: (als Zugriffsbezeichner wird 1 verwendet)
OPEN "C:\file01.txt" FOR OUTPUT AS 1 |
Wurde die Datei ordnungsgemäß geöffnet, kann aus dieser gelesen oder in diese geschrieben werden. In die Datei kann mit PRINT geschrieben werden. Die Syntax sieht dazu wie folgt aus:
PRINT #Zugriffsbezeichner, Text |
Wäre beispielsweise der Zugriffsbezeichner 1 und möchte man den Text "Dieser Text wird in eine Textdatei geschrieben" in eine Datei schreiben, so ginge dies folgendermaßen:
PRINT #1, "Dieser Text wird in eine Textdatei geschrieben" |
Nach dem Zugriff auf die Datei (egal ob die Datei gelesen oder geschrieben wurde) muss diese geschlossen werden. Dies geschieht mithilfe des Befehls CLOSE. Dessen Syntax:
ClOSE Zugriffsbezeichner |
In diesem Fall:
ClOSE 1 |
Das nächste Beispiel zeigt, wie eine Textdatei geschrieben werden kann:
CLS OPEN "C:\file01.txt" FOR OUTPUT AS 1 PRINT "'-Ende' eingeben um das Programm zu beenden" DO LINE INPUT ": ", buffer$ IF buffer$ <> "-Ende" THEN PRINT #1, buffer$ LOOP UNTIL buffer$ = "-Ende" CLOSE 1 |
In der zweiten Zeile wird die Datei "file01.txt" im Hauptverzeichnis der Partition/Festplatte C angelegt. Da OUTPUT angegeben wurde, wird die Datei zum Schreiben geöffnet. Als Zugriffbezeichner wurde 1 gewählt. Diese 1 repräsentiert quasi die Datei. Sie muss angegeben werden, damit auf die richtige Datei zugegriffen wird. (hier ist die richtige Datei die Datei "file01.txt" im Verzeichnis "C:\") Der nächste interessante Teil ist die Schleife. Zunächst wird mit LINE INPUT in die Variable buffer$ ein String eingelesen. Dieser String soll später in die Datei geschrieben werden. Die nächste Schleife überprüft ob der Wert des Strings ungleich "-Ende" ist. Ist er das wird der Text in die Datei geschrieben. Der Text Ende ist unserer Abbruchbedingung. Wird dieser Text eingegeben, wird das Programm beendet. Die IF-Anweisung sorgt dafür, dass nicht auch der Text "-Ende" in der Datei steht. Sie haben somit die Möglichkeit, unendlich viel Text in die Datei schreiben zu lassen. Damit immer wieder die Möglichkeit besteht Text einzugeben und damit dieser auch in die Datei geschrieben wird, hierfür ist die Schleife notwendig. Abschließend wird die Datei ordnungsgemäß mit CLOSE geschlossen.
Weiters werden wir die Datei wieder einlesen und den Inhalt der Datei ausgeben. Zunächst muss die Datei geöffnet werden. Da wir sie einlesen möchten, ist nun als Zugriffsmodus INPUT anzugeben. Zum Beispiel:
OPEN "C:\file01.txt" FOR INPUT AS 1 |
Nachdem die Datei geöffnet wurde, können wir sie einlesen. Wir nehmen hierzu LINE INPUT. (auch mit INPUT möglich) LINE INPUT wird folgendermaßen angewendet:
LINE INPUT #Zugriffsnummer, Variable |
LINE INPUT liest eine Zeile aus der Datei ein und speichert den eingelesenenen Text in der angegebenen Variable. Die Variable muss vom Typ String sein. Beispielsweise:
LINE INPUT #1, buffer$ |
Wichtig ist beim zeilenweisen Auslesen von Textdateien die Funktion EOF, die dann true liefert, wenn das Dateiende erreicht ist. Die Funktion EOF erwartet als Parameter Zugriffsnummer der Datei. Nach dem Auslesen der Datei muss diese geschlossen werden. Das nächste Beispiel soll zeigen, wie die mit dem obigen Beispiel geschriebene Textdatei wieder ausgelesen werden. Der ausgelesene Inhalt wird auf dem Bildschirm angezeigt.
CLS OPEN "C:\file01.txt" FOR INPUT AS 1 DO LINE INPUT #1, buffer$ PRINT buffer$ LOOP UNTIL EOF(1) CLOSE 1 |
Zunächst wird die Datei "C:\file01.txt" zum Lesen geöffnet. Als Zugriffsnummer wurde wie beim vorigen Beispiel 1 definiert. Dann wird in einer Schleife die Datei zeilenweise ausgelesen und der gelesene Text sofort nach dem Lesen auf dem Bildschirm angezeigt. Die Schleife wird beendet, wenn EOF true liefert, das passiert, wenn das Dateiende erreicht ist. Zum Schluss wird die Datei geschlossen, damit auf sie wieder problemlos von anderen Programmen zugegriffen werden kann.
6.2; Schlussbemerkungen
Als Autor hoffe ich natürlich, dass Sie aus diesem Tutorial Ihren Nutzen ziehen konnten. Hier möchte ich in FAQ-Form (FAQ = Frequently Asked Questions; häufig gestellte Fragen) Tipps geben und einige Fragen beantworten.
Wie lange benötige ich, bis ich richtig gut Programmieren kann?
Dies lässt sich nicht so einfach sagen. Manche benötigen Monate, manche sogar Jahre. Wichtig ist häufiges Üben! Programmieren
Sie am besten täglich kleinere Programme ...
Wie kann ich meine Basic-Kenntnisse erweitern?
Sie
können entweder ein Basic-Buch erwerben oder sich nach weiterführenden
Tutorials im Internet umschauen. Zurzeit kann ich Ihnen leider auf der
Seite Bücher KEINE Basic-Bücher empfehlen.
Auf der Seite Links finden Sie jedoch einige gute Links zu weiterführenden
Basic-Homepages. (u.a.)
Weiterhin viel Spaß beim Programmieren wünscht der Autor dieses Tutorials, Andreas Hammer Dieses Tutorial wurde veröffentlicht unter http://www.tutorials.at. |