|
11.1.5.1 Sequentielle und Direktzugriffsdateien
Die Pakete Sequential_IO und Direct_IO enthalten die Definitionen für sequentiellen
und direkten Zugriff auf externe Dateien.
Bei sequentiellem Zugriff wird die Datei als eine Folge von Werten betrachtet,
die in der Reihenfolge ihres Auftretens übertragen werden können. Sequentielle
Dateien können mit dem Modus Eingabedatei (In_File), Ausgabedatei (Out_File)
und Erweiterungsdatei (Append_File) geöffnet werden. Wenn die Datei als Ein-
oder Ausgabedatei geöffnet wird, beginnt der Zugriff am Anfang der Datei,
beim Öffnen als Erweiterungsdatei am Ende der Datei.
Bei direktem Zugriff wird die Datei als eine Folge von Elementen bestimmter
Größe betrachtet, die zwar in einer festen Reihenfolge vorliegen,
auf
die aber auch direkt durch Angabe eines Indexwertes, der größer als
null sein muß, zugegriffen werden kann. Direktzugriffsdateien können
mit dem Modus Eingabedatei (In_File), Ausgabedatei (Out_File) und Ein-/Ausgabedatei
(Inout_File) geöffnet werden. Beim Öffnen wird der
aktuelle Index auf eins gesetzt.
Die aktuelle Größe einer Datei ist eine Eigenschaft der externen
Datei und ist somit für alle darauf zugreifenden Dateiobjekte gleich.
Die aktuelle Indexposition innerhalb einer Direktzugriffsdatei ist eine Eigenschaft
des Dateiobjekts und kann somit bei mehrfacher Verwendung einer externen Datei
unterschiedlich sein.
Unterprogramme zur Dateiverwaltung
procedure Create (File : in out File_Type;
Mode : in File_Mode := ...;
Name
: in String := "";
Form : in String := "");
|
Die Prozedur Create erstellt eine neue externe Datei mit dem Namen "Name"
und den Eigenschaften in "Form". Wenn der Name eine leere Zeichenkette ist,
wird eine temporäre Datei angelegt, die nach dem Beenden des Programms nicht
mehr verwendet werden
kann. Die Datei hat den in "Mode" angegebenen Modus, Standard bei Text-
und
sequentiellen Dateien ist Out_File, bei Direktzugriffsdateien Inout_File. Nach
dem Aufruf von Create bleibt die Datei geöffnet. Wenn die Datei bereits
geöffnet
ist, wird die Ausnahme Status_Error ausgelöst,
wenn im Namen ein nicht erlaubtes Zeichen enthalten ist, wird die Ausnahme Name_Error
ausgelöst. Wenn der Modus falsch gesetzt wird, wird die Ausnahme Use_Error
ausgelöst.
procedure Open (File : in out File_Type;
Mode : in File_Mode;
Name
: in String;
Form : in String := "");
|
Die Prozedur Open verknüpft das Dateiobjekt "File" mit der vorhandene
externen Datei mit dem Namen "Name" und den Eigenschaften "Form". Nach
dem Aufruf von Open bleibt die Datei geöffnet. Wenn die Datei bereits geöffnet
ist, wird die Ausnahme Status_Error ausgelöst.
Wenn eine Datei mit dem angegebenen Namen nicht gefunden wird, oder der Name
aus
einem anderen Grund ungültig ist, wird die Ausnahme Name_Error ausgelöst.
Wenn der
Modus für die ausgewählte Datei nicht möglich ist, wird die Ausnahme
Use_Error ausgelöst.
procedure Close (File : in out File_Type);
|
Schließt die zum Dateiobjekt "File" gehörende externe Datei
durch Aufheben der Verknüpfung, die durch Open oder Create erstellt wurde.
Wenn
die Datei nicht geöffnet ist, wird die Ausnahme Status_Error ausgelöst.
procedure Delete (File : in out File_Type);
|
Die Prozedur löscht die externe Datei, die mit dem Dateiobjekt "File"
verknüpft ist.
Wenn die Datei nicht geöffnet ist, wird die Ausnahme Status_Error ausgelöst,
wenn die Datei nicht gelöscht werden kann, wird die Ausnahme Use_Error ausgelöst.
procedure Reset (File : in out File_Type ; Mode : in File_Mode);
procedure Reset (File : in out File_Type);
|
Die Prozedur Reset setzt das angegebene Dateiobjekt "File" zurück,
d. h. der Positionszeiger wird auf die Position gesetzt, auf die er auch beim Öffnen
gesetzt würde. Wenn der Modus der Datei Append_File ist, wird der Zeiger
auf das Ende der Datei
gesetzt, wenn er In_File oder Out_File ist, wird der Zeiger auf den Anfang der
Datei gesetzt.
Wenn der Parameter "Mode" nicht angegeben wird, wird er so beibehalten,
wie
er beim Öffnen oder beim letzten Zurücksetzen angegeben wurde. Wenn
die Datei nicht geöffnet ist, wird die Ausnahme Status_Error ausgelöst.
Wenn ein Zurücksetzen nicht erlaubt ist, oder aber ein falscher Modus angegeben
wurde,
wird die Ausnahme Use_Error ausgelöst.
function Mode (File : in File_Type) return File_Mode;
|
Die Funktion Mode liefert den aktuellen Modus des Dateiobjekts "File".
Wenn die Datei nicht geöffnet ist, wird die Ausnahme Status_Error ausgelöst.
function Name (File : in File_Type) return String;
|
Liefert den kompletten Namen der externen Datei, die mit dem Dateiobjekt "File"
verknüpft ist.
Wenn die Datei nicht geöffnet ist, wird die Ausnahme Status_Error ausgelöst.
Wenn
die Datei keinen Namen hat oder eine temporäre Datei ist, wird die Ausnahme
Use_Error
ausgelöst.
function Form (File : in File_Type) return String;
|
Liefert die komplette Eigenschaftenzeichenkette, die zum Dateiobjekt "File"
gehört. Hierzu gehören auch die Standardeigenschaften, die normalerweise
beim Öffnen
nicht explizit angegeben werden müssen. Wenn die Datei nicht geöffnet
ist, wird die Ausnahme Status_Error ausgelöst.
function Is_Open (File : in File_Type) return Boolean;
|
Liefert Wahr, wenn die Datei geöffnet ist, also das Dateiobjekt "File"
mit einer externen Datei verknüpft ist.
Ein-und Ausgabeoperationen für sequentielle Dateien
procedure Read (File : in File_Type; Item : out Element_Type);
|
Die Prozedur liefert in "Item" das nächste Element aus der sequentiellen
Datei "File", die mit dem Modus In_File geöffnet sein muß.
procedure Write (File : in File_Type; Item : out Element_Type);
|
Die Prozedur Write schreibt das Element aus "Item" in die sequentielle
Datei "File".
Die Datei muß entweder mit dem Modus Out_File oder dem Modus Append_File
geöffnet sein.
function End_Of_File (File : in File_Type) return Boolean;
|
Liefert "Wahr", wenn keine weiteren Elemente mehr aus der Datei "File"
gelesen werden
können. Die Datei muß mit dem Modus In_File geöffnet worden sein.sgelöst,
wenn im Namen ein nicht erlaubtes Zeichen enthalten ist, wird die Ausnahme Name_Error
ausgelöst. Wenn der Modus falsch gesetzt wird, wird die Ausnahme Use_Error
ausgelöst.
Ein-und Ausgabeoperationen für Direktzugriffsdateien
procedure Read (File : in File_Type; Item : out Element_Type;
From
: in Positive_Count);
procedure Read (File : in File_Type; Item : out Element_Type);
|
Die Prozedur Read liefert in "Item" das nächste Element aus der
Datei "File". Wenn der Parameter "From" angegeben wird, wird der Dateizeiger
vorher auf diese
Position in der Datei gesetzt. Nach dem Lesen des Elements wird der Dateizeiger
auf das nächste Element gesetzt. Die Datei muß mit dem Modus In_File
oder Inout_File geöffnet
worden sein.
procedure Write (File : in File_Type; Item : in Element_Type;
To
: in Positive_Count);
procedure Write (File : in File_Type; Item : in Element_Type);
|
Die Prozedur Write schreibt das Element in "Item" an die aktuelle Position
in der Datei "File". Wenn der Parameter "To" angegeben wird, wird der
Dateizeiger
vorher auf diese Position der Datei gesetzt. Nach dem Schreiben des Elements
wird
der Dateizeiger
auf das nächste Element gesetzt. Die Datei muß mit dem Modus Out_File
oder
Inout_File geöffnet worden sein.
procedure Set_Index (File : in File_Type; To : in Positive_Count);
|
Die Prozedur Set_Index setzt den Dateizeiger der Datei "File" auf den
Wert "To", das nächste Zeichen wird an die Position "To" geschrieben,
oder von
ihr gelesen.
function Index (File : in File_Type) return Positive_Count;
|
Die Funktion Index liefert die aktuelle Indexposition des Dateizeigers der Datei
"File".
function Size (File : in File_Type) return Count;
|
Die Funktion Size liefert die aktuelle Größe der Datei "File",
auf diese Position muß der Dateizeiger gesetzt werden, wenn an die Datei
Daten angehängt werden sollten.
function End_Of_File (File : in File_Type) return Boolean;
|
Liefert "Wahr", wenn keine weiteren Elemente mehr aus der Datei "File"
gelesen werden können. Die Datei muß mit dem Modus In_File oder Inout_File
geöffnet worden sein. Ausnahme Status_Error ausgelöst, wenn die Datei
nicht gelöscht werden kann, wird die Ausnahme Use_Error ausgelöst.
Spezifikation
des Paketes "Ada.Sequential_IO"
Spezifikation
des Paketes "Ada.Direct_IO"
|