Programmiersprache Pascal
Untypisierte Binärdateien
Turbo Pascal
Deklaration einer Dateivariablen
VAR f : FILE;
f steht hier als Bezeichner für eine Dateivariable.
Bindung der Dateivariablen an einen Dateinamen
Assign(f, dateiname);
AssignFile(f, dateiname); { Delphi }
f ist eine Dateivariable, dateiname eine Zeichenkette, die
den Namen einer Datei benennt.
dateiname muß den Konventionen des Betriebssystems
entsprechen.
Der Aufruf von Assign löst keinen Zugriff auf das Dateisystem aus.
Assign ist eine vordefinierte Prozedur.
Nach der Bindung von f an den Dateinamen beziehen sich alle
weiteren Operationen, die auf f Bezug nehmen, solange auf die
benannte Datei, bis f durch einen weiteren Aufruf von Assign
eine andere externe Datei zugeordnet wird.
Eine Datei darf zur gleichen Zeit nicht mehrfach geöffnet sein.
Eröffnen einer exitierenden Datei zum Lesen und/oder Modifizieren
Reset(f);
Reset(f, recsize);
f ist eine Dateivariable, die an einen Dateinamen gebunden sein
muß.
Die bezeichnete Datei muß existieren. Dies wird durch Zugriff auf das
Dateisystem geprüft.
Der Positionszeiger zeigt auf den Dateianfang.
Die Datensatzlänge ist durch recsize bestimmt. Wird
recsize nicht angegeben, so gilt als Standardwert 128.
Maßeinheit für die Angabe ist Byte.
Es sind sowohl Lese- als auch Schreibzugriffe auf die Datei zulässig.
Reset ist eine vordefinierte Prozedur.
Eröffnen einer Datei, die neu erstellt wird
Rewrite(f);
Rewrite(f, recsize);
f ist eine Dateivariable, die an einen Dateinamen gebunden sein
muß.
Die Datei wird neu angelegt. Dies gilt auch dann, wenn zuvor bereits eine
Datei mit dem angegebenen Namen existiert, d.h. diese Datei wird
komplett überschrieben.
Der Positionszeiger zeigt auf den Dateianfang.
Die Datensatzlänge ist durch recsize bestimmt. Wird
recsize nicht angegeben, so gilt als Standardwert 128.
Maßeinheit für die Angabe ist Byte.
Es sind sowohl Lese- als auch Schreibzugriffe auf die Datei zulässig.
Rewrite ist eine vordefinierte Prozedur.
Abfrage des Positionszeigers
Eof(f); { Dateiende ? }
FilePos(f); { Wert des Positionszeigers }
Eof und FilePos sind vordefinierte Funktionen, Eof
liefert einen Wert vom Typ BOOLEAN, FilePos einen Wert vom Typ
LONGINT.
f ist eine Dateivariable, die an einen Dateinamen gebunden sein
muß. Die Datei muß geöffnet sein.
Eof (end of file) prüft, ob der Positionszeiger auf dem
Dateiende steht.
Liefert FilePos den Wert 0, so steht der Positionszeiger am
Dateianfang.
Der Positionszeiger liefert den Abstand zum Dateianfang in Byte.
Setzen des Positionszeigers
Seek(f, n);
f ist eine Dateivariable, die an einen Dateinamen gebunden sein
muß. Die Datei muß geöffnet sein.
Der Dateizeiger wird auf die Position n gesetzt. Die erste angebbare
Position ist 0. Wird n mit dem Wert FileSize(f)
(Länge der Datei in Byte) belegt, so wird der Positionszeiger auf das
Dateiende gesetzt.
Ermittlung der Dateigröße
FileSize(f);
FileSize ist eine vordefinierte Funktion, die einen Wert vom Typ
LONGINT liefert.
f ist eine Dateivariable, die an einen Dateinamen gebunden sein
muß. Die Datei muß geöffnet sein.
Die Dateigröße gibt bei einer untypisierten Datei die
Größe der Datei in Byte an.
Lesen aus einer untypisierten Binärdatei
BlockRead(f, rec, rec_number);
BlockRead(f, rec, rec_number, result);
f ist eine Dateivariable, die an einen Dateinamen gebunden sein
muß. Die Datei muß geöffnet sein.
rec ist eine Variable, deren Datentyp so gewählt ist, daß
sie rec_number * recsize Byte aufnehmen kann. rec_number ist
die Anzahl der Datensätze (der Länge recsize), die gelesen
werden sollen.
recsize wird beim Eröffnen der Datei festgelegt. Wurde
recsize dort nicht explizit angegeben, so beträgt die
Datensatzlänge 128.
rec wird meist als Array mit Komponenten vom Typ BYTE oder
CHAR vereinbart.
Die Variable rec übernimmt aus der Datei
rec_number * recsize Byte ab der Stelle, auf den der Positionszeiger
zeigt.
Der Positionszeiger wird anschließend um buf_size Byte
weitergesetzt.
Wird der Parameter result angegeben, so muß es sich dabei um
eine Variable handeln (Datentyp WORD). result gibt an,
wieviele Byte tatsächlich übertragen wurden.
Schreiben in eine untypisierte Binärdatei
BlockWrite(f, rec, rec_number);
BlockWrite(f, rec, rec_number, result);
f ist eine Dateivariable, die an einen Dateinamen gebunden sein
muß. Die Datei muß geöffnet sein.
rec ist eine Variable, deren Datentyp so gewählt ist, daß
sie rec_number * recsize Byte aufnehmen kann. rec_number ist
die Anzahl der Datensätze (der Länge recsize), die
geschrieben werden sollen.
recsize wird beim Eröffnen der Datei festgelegt. Wurde
recsize dort nicht explizit angegeben, so beträgt die
Datensatzlänge 128.
rec wird meist als Array mit Komponenten vom Typ BYTE
oder CHAR vereinbart.
Aus der Variablen rec werden rec_number * recsize Byte
in die Datei übertragen, und zwar ab der Stelle, auf die der
Positionszeiger zeigt.
Der Positionszeiger wird anschließend um buf_size Byte
weitergesetzt.
Wird der Parameter result angegeben, so muß es sich dabei um eine
Variable handeln (Datentyp WORD). result gibt an, wieviele Byte
tatsächlich übertragen wurden.
Beispiel:
PROGRAM file_test;
VAR f: FILE;
ch : CHAR;
BEGIN
Assign(f, 'test.txt'); { Datei als untypisierte Datei eröffnen }
Reset(f, 1); { Datensatzlänge 1 }
Seek(f, 4);
ch := '#';
BlockWrite(f, ch, 1); { 1 Zeichen ersetzen }
Close(f);
END.
Verkürzen einer Datei
Truncate(f);
f ist eine Dateivariable, die an einen Dateinamen gebunden sein
muß. Die Datei muß geöffnet sein.
Das Dateiende wird auf die Position gesetzt, auf die der Positionszeiger
zeigt.
Schließen der Datei
Close(f);
CloseFile(f); { Delphi }
f ist eine Dateivariable, die an einen Dateinamen gebunden sein
muß.
Auf die geschlossene Datei sind keine weiteren Operationen möglich,
solange sie nicht erneut eröffnet wird.
P. Böhme, 03.09.1995