11. Anlage
 
zurück
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"


 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.