Programmiersprache Pascal
Direktzugriffsdateien
Direktzugriffsdateien wurden mit Extended Pascal eingeführt.
Direktzugriff bedeutet, direkt auf Datensätze positionieren zu
können, ohne sequentiell die vorherigen Datensätze durchlaufen zu
müssen.
Direktzugriffsdateien werden wie folgt deklariert:
TYPE name = FILE[indextyp] OF basistyp;
indextyp muß ein ordinaler Datentyp sein.
basistyp kann ein (fast) beliebiger Datentyp sein. Nichtzugelassen
sind Dateitypen sowie Typen mit Komponenten, die einen Dateityp besitzen.
Eine Direktzugriffsdatei
-
besteht aus Datensätzen, deren Struktur durch basistyp
bestimmt sind
-
verwaltet einen Datensatzzeiger
der Datensatzzeiger wird mit Hilfe von Werten aus indextyp
positioniert
Für die Arbeit mit Direktzugriffsdateien gibt es spezielle Prozeduren:
-
SeekRead(datei_variable, index);
Positionierung des Datensatzzeigers auf den durch index
indizierten Datensatz
Erlaubnis für nachfolgende Leseoperationen
-
SeekWrite(datei_variable, index);
Positionierung des Datensatzzeigers auf den durch index
indizierten Datensatz
Erlaubnis für nachfolgende Schreiboperationen
-
SeekUpdate(datei_variable, index);
Positionierung des Datensatzzeigers auf den durch index
indizierten Datensatz
Erlaubnis für nachfolgende Schreiboperationen
weist index über das aktuelle Ende der Datei hinaus,
so wird auf das Dateiende positioniert (hinter den letzten Datensatz)
positioniert
Ein Datensatz kann - nach erfolgter Positionierung durch SeekWrite
oder SeekUpdate - auf folgende Weisen geschrieben werden:
-
Write(datei_variable, datensatz);
-
datei_variable^ := datensatz; Put(datei_variable);
datensatz muß eine Variable vom Typ basistyp
sein.
Ein Datensatz kann - nach erfolgter Positionierung durch SeekRead
auf folgende Weisen geschrieben werden:
-
Read(datei_variable, datensatz);
-
Get(datei_variable); datensatz := datei_variable^;
datensatz muß eine Variable vom Typ basistyp
sein.
Beispiel:
PROGRAM dfile(f, OUTPUT);
TYPE df = FILE[1..3] OF INTEGER;
VAR f : df;
i, j : INTEGER;
BEGIN
Rewrite(f);
SeekWrite(f, 1);
FOR i:=1 TO 3 DO BEGIN
f^ := i; Put(f);
END;
SeekRead(f, 1);
FOR i:=1 TO 3 DO BEGIN
Get(f); j := f^;
Writeln(j);
END;
FOR i:= 3 DOWNTO 1 DO BEGIN
SeekUpdate(f, i);
Write(f, 10*i);
END;
FOR i:= 3 DOWNTO 1 DO BEGIN
SeekRead(f, i);
Read(f, j);
Writeln(j);
END;
Close(f);
END.
Im Zusammenhang mit dem Datensatzzeiger können die beiden folgenden
Funktionen genutzt werden:
-
position := Position(datei_variable);
Liefert die aktuelle Position des Datensatzzeigers.
-
position := LastPosition(datei_variable);
Liefert die Position des letzten Datensatzes.
position muß eine Variable vom Typ indextyp sein.
P. Böhme, 18.07.1996