Textdateien können nur sequentiell gelesen werden.
Für Textdateien sieht Pascal den Datentyp TEXT und eine Reihe
von vordefinierten Unterprogrammen vor.
Während einige Unterprogramme (Read, Readln, Write, Writeln, Eof,
Eoln) über alle Pascal-Versionen hinweg weitgehend einheitlich
verwendet werden, gibt es bei anderen (z.B. zur Dateieröffnung) eine
Reihe von Systemabhängigkeiten.
Einige Systeme (z.B. Turbo Pascal, Delphi) realisieren nicht alle in
Standard Pascal vorgesehen Routinen (z.B. Get, Put).
Bemerkung:
Dateien, die ausschließlich Text enthalten, können natürlich
auch als Binärdatei behandelt werden.
Dies ermöglicht einerseits direktere Zugriffe, erschwert aber andere
Operationen, da die Zeilenstruktur nicht mehr in einfacher Weise ausgenutzt
werden kann.
VAR f1 : TEXT; { Textdatei }
f2 : FILE OF CHAR; { Binärdatei }
Der Umgang mit f1 und f2 unterscheidet sich zum Teil
beträchtlich, auch wenn beide an die gleiche Datei gebunden
werden. Standard Pascal
Deklaration einer Dateivariablen
VAR f : TEXT;f steht hier als Bezeichner für eine Dateivariable.
Turbo Pascal
Deklaration einer Dateivariablen
VAR f : TEXT;
VAR f : TEXTFILE; { zusätzlich in Delphi }
f steht hier als Bezeichner für eine Dateivariable. Bindung der Dateivariablen an einen Dateinamen
Assign(f, dateiname);
AssignFile(f, dateiname); { zusätzlich in Delphi }
f ist eine Dateivariable, dateiname eine Zeichenkette, die
den Namen einer Datei benennt. Nach der Bindung von f an den Dateinamen richten sich alle weiteren Operationen, die auf f Bezug nehmen, solange an die benannte Datei, bis f durch einen weiteren Aufruf von Assign eine andere externe Datei zugeordnet wird.
Wird für dateiname die leere Zeichenkette angegeben, so erfolgt in Abhängigkeit von der verwendeten Eröffnungsprozedur die Bindung an die Standardeingabe stdin bzw. die Standardausgabe stdout.
Eine Datei darf zur gleichen Zeit nicht mehrfach geöffnet sein.
Eröffnen einer Datei zum Lesen
Reset(f);f ist eine Dateivariable, die an einen Dateinamen gebunden sein muß.
Eröffnen einer Datei zum Schreiben (Überschreiben)
Rewrite(f);f ist eine Dateivariable, die an einen Dateinamen gebunden sein muß.
Eröffnen einer Datei zum Schreiben (Anfügen)
Append(f);f ist eine Dateivariable, die an einen Dateinamen gebunden sein muß.
Abfrage des Positionszeigers
Eof(f); { Dateiende ? }
Eoln(f); { Zeilenende ? }
Eof und Eoln sind vordefinierte Funktionen, die einen Wert
vom Typ BOOLEAN liefern. Lesen aus einer Textdatei
Readln(f, var_1, ..., var_n); Read(f, var_1, ..., var_n);f ist eine Dateivariable, die an einen Dateinamen gebunden sein muß. Die Datei muß geöffnet sein.
Schreiben in eine Textdatei
Writeln(f, var_1, ..., var_n); Write(f, var_1, ..., var_n);f ist eine Dateivariable, die an einen Dateinamen gebunden sein muß. Die Datei muß geöffnet sein.
var kann eine Formatierungsangabe nachgestellt werden:
var:w var:w:dw ist eine ganze Zahl und gibt an, wieviele Zeichen ausgegeben werden sollen. Die Angabe wird ignoriert, wenn zur Ausgabe des Wert mehr Zeichen als angegeben benötigt werden.
Die Ausgabe erfolgt gepuffert: Jede geöffnete Datei verfügt
über einen Dateipuffer.
Daten werden erst dann in das Dateisystem übertragen, wenn der Puffer
voll ist bzw. wenn das Ausschreiben des Puffers erzwungen wird.
Dies kann mit Hilfe der folgenden Prozedur erfolgen:
Flush(f);Die Größe des Dateipuffers (Standard: 128 Byte) kann bei Bedarf mit Hilfe der Prozedur SetTextBuf verändert werden.
Schließen der Datei
Close(f);
CloseFile(f); { zusätzlich in Delphi }
f ist eine Dateivariable, die an einen Dateinamen gebunden sein
muß. Weitere Operationen mit Dateien
Erase(f); { Datei löschen }
Rename(f, neuer_name); { Datei umbenennen }
f ist eine Dateivariable, die an einen Dateinamen gebunden sein
muß.
Extended Pascal
Aufgeführt werden hier lediglich einige Abweichungen im Vergleich zu Turbo Pascal.
Die Bindung der Dateivariablen an einen Dateinamen und das Eröffnen der betreffenden Datei kann in einem Schritt erfolgen:
Reset(f, dateiname); { Eröffnen zum Lesen }
Rewrite(f, dateiname); { Eröffnen zum Schreiben/Überschreiben }
Extend(f, dateiname); { Eröffnen zum Schreiben/Anfügen }
Beispiel:
PROGRAM file1(OUTPUT);
VAR f : TEXT;
s : STRING(80);
BEGIN
Rewrite(f, 'test.txt');
Writeln(f, 'Hello, World');
Close(f);
Reset(f, 'test.txt');
Readln(f, s);
Writeln(s);
Close(f);
Extend(f, 'test.dat');
Writeln(f, 'Hello, Again');
Close(f);
Reset(f, 'test.dat');
WHILE NOT Eof(f) DO BEGIN
Readln(f, s);
Writeln(s);
END;
END.