Quick Basic: Dateibearbeitung

Dateibearbeitung Bearbeiten

Bis jetzt können wir Werte und Texte nur im Programm selber speichern. Das heißt, man hat diese Daten auch nur während des Programmbetriebs. Um Daten dennoch auf Dauer abzulegen, ist es sinnvoll, diese in eine Datei zu speichern. Praktisch wäre es auch noch, diese dann ins Programm wieder einlesen zu können. Speziell für die Datenbearbeitung bietet QuickBASIC zwei Befehle: OPEN (Um eine Datei für den Schreib- bzw. Lesezugriff zu öffnen) und CLOSE (Um eine Datei wieder zu schließen).

Sehen wir uns die Syntax an:

OPEN Dateiname FOR Zugriffsmodus AS Dateinummer
   'Datenspeicherung 
CLOSE Dateinummer

In der ersten Zeile sehen wir, dass der OPEN-Befehl mehrere Parameter braucht:

  • Dateiname - Dies ist der Pfad zur Datei in Form eines Strings. Wenn man nur den Dateinamen angibt, wird die Datei in das Verzeichnis der Programm-EXE angelegt bzw. aus dieser wird gelesen. (ACHTUNG! Dateinamen und Verzeichnisse dürfen nicht mehr als acht Buchstaben haben!)
  • Zugriffsmodus - Dieser Parameter beschreibt, ob wir etwas in die Datei schreiben oder aus der Datei lesen wollen. Hier eine Auflistung der wichtigsten Zugriffsmodi:
    • OUTPUT - Schreibt etwas in die Datei und überschreibt (falls vorhanden) den Inhalt der angegebenen Datei
    • INPUT - Liest Zeile für Zeile aus der Datei
    • APPEND - Schreibt etwas ans Ende der Datei (vorhandener Inhalt wird nicht gelöscht)
  • Dateinummer - QuickBASIC benötigt für jeden Dateikanal eine eigene Nummer. Diese Nummer muss in diesem Format angegeben werden: #1, #2, usw.

In der letzten Zeile wird der Datenkanal wieder geschlossen und die Datei wird freigegeben. Innerhalb dieses Blockes muss man doch auch etwas machen können, oder?, wirst du dir wohl denken. Richtig, so ist es! Um mit Dateien interagieren zu können, benötigen wir zwei neue Befehle: PRINT Dateinummer und INPUT Dateinummer .

PRINT # und INPUT # Bearbeiten

Syntax:

PRINT Dateinummer, Stringausdruck
INPUT Dateinummer, Stringausdruck

Dateinummer ist auch in diesen Befehlen im Format #1 anzulegen. Diese Nummer muss die vom anzusprechenden Datenkanal sein. Nach der Nummer folgt ein Komma und danach der String, der abgespeichert bzw. in dem eingelesen werden soll.

Es wird Zeit, für ein praktisches Beispiel:

DIM Text AS STRING 'Stringvariable initialisieren
Text = "Hallo Welt!"
OPEN "Test.txt" FOR OUTPUT AS #1 'Datenkanal öffnen für den Schreibzugriff mit der Nummer 1
   PRINT #1, Text 'Variableninhalt in Datei speichern
CLOSE #1 'Datenkanal schließen

Die erste Zeile deklariert eine Stringvariable und erhält in der zweiten den Text Hallo Welt!. Die dritte Zeile beinhaltet den Befehl, um die Datei für den Schreibzugriff (OUTPUT) zu öffnen. Als Dateinummer wird hier 1 verwendet. In der nächsten Zeile schreiben wir den Inhalt der zuvor deklarierten Stringvariabe in die Datei. Zum Abschluss wird der Datenkanal wieder geschlossen.

Wenn wir das Programm ausführen, werden wir in unserem QuickBASIC-Verzeichnis (es sei denn das Programm startet über eine kompilierte EXE) eine neue Datei finden, nämlich Test.txt. Diese Datei können wir im Editor öffnen und weiterbearbeiten. Solche einfach bearbeitbare Dateien nennt man auch sequentielle Dateien. Als Ausgabe erhalten wir in diesem Beispiel noch nichts, da wir erstmal nur etwas in eine Datei schreiben.

Sehen wir uns ein Beispiel zum Einlesen der eben gespeicherten Datei an:

 DIM Text AS STRING 'Stringvariabe initialisieren
 OPEN "Test.txt" FOR INPUT AS #1 'Dateikanal öffnen für den Lesezugriff mit der Nummer 1
    INPUT #1, Text 'erste Zeile in Variable speichern
 CLOSE #1 'Datenkanal schließen
 PRINT Text

Als erstes wird wieder eine Variable des Typs String deklariert. Danach wird der Datenkanal zum einlesen geöffnet und mit der Dateinummer 1 versehen. Als nächstes wird die erste Zeile in der Datei, im vorigen Beispiel also Hallo Welt!, in die Variable Text gespeichert. Der Datenkanal wird wieder geschlossen und zu guter Letzt wird der eben eingelesene Text am Bildschirm ausgegeben. Die Ausgabe sähe dann so aus:

 Hallo Welt!

Nun sehen wir uns APPEND näher an.

Dazu ein neues Beispiel:

DIM Text AS STRING 'Stringvariable initialisieren
Text = "Und noch einmal..."
OPEN "Test.txt" FOR APPEND AS #1 'Dateikanal öffnen für den Schreibzugriff mit der Nummer 1
   PRINT #1, Text 'Variableninhalt an Datei anhängen
CLOSE #1 'Datenkanal schließen

Die erste Zeile deklariert wieder eine Stringvariable, die zweite legt einen Text in dieser fest (Und noch einmal...). Danach wird der Datenkanal geöffnet für den Schreibzugriff (versehen mit der Nummer 1) und der Variableninhalt in die Datei gespeichert. Am Schluss wird der Datenkanal geschlossen. Eine Ausgabe auf dem Bildschirm erfolgt nicht.

Wenn wir nun die Datei Test.txt öffnen, werden wir feststellen, dass wir nun zwei Zeilen in der Datei haben:

Hallo Welt!
Und noch einmal...

EOF Bearbeiten

Zum Schluss möchte ich noch eine weitere, nette Funktion von QuickBASIC erwähnen: EOF (ausgeschrieben End Of File). Mit dieser Funktion können wir prüfen, ob das Dateiende erreicht ist und können uns so eine Fehlermeldung ersparen.

Syntax:

EOF(Dateinummer)

Die Dateinummer ist die Nummer des zu prüfenden Datenkanals und muss im Format #1, #2, usw. vorliegen. Wir wollen unser kleines Einlesebeispiel etwas abwandeln:

 DIM Text AS STRING 'Stringvariabe initialisieren
 OPEN "Test.txt" FOR INPUT AS #1 'Dateikanal öffnen für den Lesezugriff mit der Nummer 1
    DO WHILE NOT EOF(1) 'Schleife solange durchlaufen lassen, bis EOF erreicht
       INPUT #1, Text 'Zeile in Variable speichern
       PRINT Text 
    LOOP
 CLOSE #1 'Datenkanal schließen

Die erste Zeile deklariert eine Variable des Typs String. Danach wird der Datenkanal für den Lesezugriff mit der Nummer 1 geöffnet. Nun kommt eine Schleife: es wird solange eine Zeile der Datei eingelesen und ausgegeben, bis das Ende von dieser erreicht ist. Somit ist es möglich Dateien mit unbekannter Länge zu lesen. Am Ende wird der Datenkanal wieder geschlossen.

Übungen Bearbeiten

  • Schreibe ein Programm, welches den Namen eines Freundes einliest, ihn in einer Datei speichert und danach wieder ausgibt.
  • Schreibe ein Programm, welches die Zahlen 1-10 in eine Datei schreibt, und danach wieder ausgibt.
  • Schreibe ein Programm, welches deine derzeitigen (oder deine letzten) Klassenkameraden abspeichert.