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