11. Anlage
 
zurück
11.1.5.3 Textein-/ausgabe


Bestandteile der Textein- und -ausgabe sind Eingaben über die Tastatur, Ausgaben an den Bildschirm und den Drucker sowie Ein- und Ausgaben in Verbindung mit Textdateien.

Textdateiverwaltung

Folgende Dateimodi sind für die Zugriffe auf Textdateien erlaubt:
  • In_File,
  • Out_File und
  • Append_File.
Zur Dateiverwaltung können die gleichen Unterprogramme verwendet werden, die auch für sequentielle Dateien zur Verfügung stehen. Hierzu gehören:
  • Create,
  • Open,
  • Close,
  • Delete,
  • Reset,
  • Mode,
  • Name,
  • Form,
  • Is_Open und
  • End_Of_File.
Die Unterprogramme Write und Read für sequentielle Dateien existieren nicht für Textdateien.

Für Textdateien kann die Zeilen- und Seitenlänge festgelegt werden. Nach dem Öffnen oder Erstellen einer Datei mit dem Modus Out_File oder Append_File sind diese Werte ungebunden, also 0. Es erfolgt kein automatischer Zeilen- oder Seitenwechsel, dies kann nur durch explizites Schreiben von Zeilenumbrüchen und Seitenwechseln erreicht werden.

Nach dem Öffnen einer Datei in einem beliebigen Modus werden die aktuelle Spalten-, Zeilen- und Seitennummer auf 1 gesetzt.
Bei Dateien mit dem Modus Append_File ist es implementierungsabhängig, ob vor dem Anhängen der Daten ein Seitenwechsel eingefügt wird oder nicht.

Beim Schließen einer Datei mit dem Modus Out_File oder Append_File wird New_Page aufgerufen, wenn das letzte Zeichen kein Seitenwechsel ist, danach wird ein Dateiendezeichen geschrieben.

Beim Zurücksetzen einer Datei mit dem Modus Out_File oder Append_File wird zuerst New_Page aufgerufen, wenn das letzte Zeichen kein Seitenwechsel ist, danach wird ein Dateiendezeichen geschrieben und die aktuelle Spalte, Zeile und Seite werden auf 1 gesetzt. Wenn der neue Modus Append_File ist, kann abhängig von der Implementierung zuerst ein Seitenwechsel geschrieben werden.

Wenn ein Reset mit Änderung des Modus auf die Standardeingabe, -ausgabe oder -fehlerdatei ausgeführt werden soll, wird die Ausnahme Mode_Error ausgelöst.


Standarddateien für Eingabe, Ausgabe und Fehlermeldungen

Standarddateien sind Dateien, die verwendet werden, wenn bei einer Ein-/Ausgabeoperation keine Datei explizit angegeben wird. Die Standarddatei für die Eingabe ist die Tastatur, die Standarddatei für die Ausgabe und für Fehlermeldungen ist der Bildschirm.

Folgende Unterprogramme werden verwendet, um die Standarddateien für Eingabe, Ausgabe und Fehlermeldungen zu beeinflussen:

procedure Set_Input (File : in File_Type);
Setzt die Standardeingabedatei auf "File". "File" muß den Modus In_File haben.

procedure Set_Output (File : in File_Type);
Setzt die Standardausgabedatei auf "File". "File" muß den Modus Out_File oder Append_File haben.

procedure Set_Error (File : in File_Type);
Setzt die Standardfehlerdatei auf "File". "File" muß den Modus Out_File oder Append_File haben.

function Standard_Input return File_Type;
function Standard_Input return File_Access;
Standard_Input liefert die Standardeingabedatei oder einen entsprechenden Zeigerwert.

function Standard_Output return File_Type;
function Standard_Output return File_Access;
Standard_Output liefert die Standardausgabedatei oder einen entsprechenden Zeigerwert.

function Standard_Error return File_Type;
function Standard_Error return File_Access;
Standard_Error liefert die Standardfehlerdatei oder einen entsprechenden Zeigerwert.

function Current_Input return File_Type;
function Current_Input return File_Access;
Current_Input liefert die aktuelle Eingabedatei oder einen entsprechenden Zeigerwert.

function Current_Output return File_Type;
function Current_Output return File_Access;
Current_Output liefert die aktuelle Ausgabedatei oder einen entsprechenden Zeigerwert.

function Current_Error return File_Type;
function Current_Error return File_Access;
Current_Error liefert die aktuelle Fehlerdatei oder einen entsprechenden Zeigerwert.

procedure Flush (File : in out File_Type);
procedure Flush;
Flush synchronisiert die interne Datei "File" mit der zugehörigen externen Datei, indem der interne Puffer in die Datei geschrieben wird, ohne die Position in der Datei zu verändern und ohne die Datei zu schließen. Die Datei muß den Modus Out_File oder Append_File haben.
Wird kein Parameter angegeben, wird die aktuelle Standardausgabedatei verwendet.


Seiten- und Zeilenlänge

Durch die Verwendung von Seiten- und Zeilenlängen ist ein layoutorientiertes Arbeit mit Spalten-, Zeilen und Seitennummern möglich.


Seiten- und Zeilenlängenspezifikation

Diese Funktionen können nur auf geöffnete Dateien mit dem Modus Out_File oder Append_File angewendet werden.

procedure Set_Line_Length (File : in File_Type; To : in Count);
procedure Set_Line_Length (To : in Count);
Setzt die maximale Zeilenlänge in Zeichen für die Ausgabe- oder Erweiterungsdatei auf den Wert von "To". Ein Wert von 0 bedeutet unbegrenzt. Ohne Angabe von "File" wird der Wert für die aktuelle Ausgabedatei gesetzt.

procedure Set_Page_Length (File : in File_Type; To : in Count);
procedure Set_Page_Length (To : in Count);
Setzt die maximale Seitenlänge in Zeilen für die Ausgabe- oder Erweiterungsdatei auf den Wert von "To". Ein Wert von 0 bedeutet unbegrenzt.

function Line_Length (File : in File_Type) return Count;
function Line_Length return Count;
Line_Length ermittelt die derzeit gesetzte maximale Zeilenlänge in Zeichen.

function Page_Length (File : in File_Type) return Count;
function Page_Length return Count;
Page_Length ermittelt die derzeit gesetzte maximale Seitenlänge in Zeilen.er einen entsprechenden Zeigerwert.

function Current_Input return File_Type;
function Current_Input return File_Access;
Current_Input liefert die aktuelle Eingabedatei oder einen entsprechenden Zeigerwert.

function Current_Output return File_Type;
function Current_Output return File_Access;
Current_Output liefert die aktuelle Ausgabedatei oder einen entsprechenden Zeigerwert.

function Current_Error return File_Type;
function Current_Error return File_Access;
Current_Error liefert die aktuelle Fehlerdatei oder einen entsprechenden Zeigerwert.

procedure Flush (File : in out File_Type);
procedure Flush;
Flush synchronisiert die interne Datei "File" mit der zugehörigen externen Datei, indem der interne Puffer in die Datei geschrieben wird, ohne die Position in der Datei zu verändern und ohne die Datei zu schließen. Die Datei muß den Modus Out_File oder Append_File haben. Wird kein Parameter angegeben, wird die aktuelle Standardausgabedatei verwendet.


Operationen auf Spalten, Zeilen und Seiten

Diese Operationen dienen dazu Spaltennummern, Zeilennummern und Seitenzahlen zu lesen und zu setzen.

procedure New_Line (File : in File_Type; Spacing : in Positive_Count := 1);
procedure New_Line (Spacing : in Positive_Count := 1);
Die Prozedur New_Line führt die in "Spacing" angegebene Anzahl Zeilenvorschübe aus. Wenn bei einem der Zeilenvorschübe die maximale Anzahl Zeilen pro Seite überschritten wird, wird ein Seitenwechsel eingefügt, die Seitenzahl um 1 erhöht und Zeilennummer auf 1 gesetzt. Die Spaltennummer wird auf 1 gesetzt. Die Datei muß den Modus Out_File oder Append_File haben.

procedure Skip_Line (File : in File_Type;
Spacing : in Positive_Count := 1);
procedure Skip_Line (Spacing : in Positive_Count := 1);
Wechselt sooft hinter den nächsten Zeilenumbruch, wie in "Spacing" angegeben. Wenn nach einem Zeilenumbruch ein Seitenwechsel folgt, so wird dieser übersprungen und die Seitenzahl um 1 erhöht. Die Spaltennummer wird auf 1 gesetzt. Die Datei muß den Modus In_File haben. Wenn Skip_Line auf ein Dateiendezeichen trifft, wird die Ausnahme End_Error ausgelöst.

function End_Of_Line (File : in File_Type) return Boolean;
function End_Of_Line return Boolean;
End_Of_Line liefert "Wahr", wenn als nächstes Zeichen ein Zeilenumbruch oder ein Dateiende folgt. Die Datei muß mit dem Modus In_File geöffnet sein.

procedure New_Page (File : in File_Type);
procedure New_Page;
Schreibt einen Zeilenumbruch, wenn die aktuelle Zeile nicht abgeschlossen ist, oder wenn die Seite leer ist. Danach wird ein Seitenwechsel geschrieben und die aktuelle Zeilennummer und die aktuelle Spaltennummer werden auf 1 gesetzt. Die Datei muß mit dem Modus Out_File oder Append_File geöffnet sein.

procedure Skip_Page (File : in File_Type);
procedure Skip_Page;
Wechselt hinter den nächsten Seitenwechsel, also an den Anfang der nächsten Seite. Die Seitenzahl wird um 1 erhöht und die Zeilennummer und die Spaltennummer werden auf 1 gesetzt. Die Datei muß mit dem Modus In_File geöffnet sein. Wenn Skip_Page auf ein Dateiendezeichen trifft, wird die Ausnahme End_Error ausgelöst.

function End_Of_Page (File : in File_Type) return Boolean;
function End_Of_Page return Boolean;
End_Of_Page liefert "Wahr", wenn das nächste zu lesende Zeichen ein Seitenwechsel oder ein Zeilenumbruch gefolgt von einem Seitenwechsel ist. Die Datei muß mit dem Modus In_File geöffnet sein.

function End_Of_File (File : in File_Type) return Boolean;
function End_Of_File return Boolean;
End_Of_File liefert "Wahr", wenn das nächstes zu lesende Zeichen ein Dateiendezeichen oder eine Kombination aus Zeilenumbruch, Seitenwechsel und Dateiendezeichen ist. Die Datei muß mit dem Modus In_File geöffnet sein.

procedure Set_Col (File : in File_Type; To : in Positive_Count);
procedure Set_Col (To : in Positive_Count);
Modus In_File:
Wenn die aktuelle Spaltennummer ungleich dem Wert von "To" ist, werden solange Zeichen, Zeilenumbrüche und Seitenwechsel aus der Datei gelesen, bis das nächste zu lesende Zeichen in der Spalte "To" steht. Wenn das Dateiende erreicht ist, wird die Ausnahme End_Error ausgelöst.

Modus Out_File oder Append_File:
Wenn "To" größer ist als die aktuelle Spaltennummer werden Leerzeichen in die Datei geschrieben, bis die aktuelle Spaltennummer "To" ist. Wenn die aktuelle Spaltennummer "To" ist, wird kein Zeichen in die Datei geschrieben. Wenn "To" kleiner ist als die aktuelle Spaltennummer wird zuerst ein Zeilenumbruch geschrieben und dann mit Leerzeichen aufgefüllt, bis die aktuelle Spaltennummer "To" ist. Wenn der Wert von "To" größer ist als die maximale Zeilenlänge, wird die Ausnahme Layout_Error ausgelöst.

procedure Set_Line (File : in File_Type ; To : in Positive_Count);
procedure Set_Line (To : in Positive_Count);
Modus In_File:
Wenn die aktuelle Zeilennummer ungleich dem Wert von "To" ist, werden solange Zeichen, Zeilenumbrüche und Seitenwechsel aus der Datei gelesen, bis die aktuelle Zeilennummer "To" ist. Wenn das Dateiende erreicht ist, wird die Ausnahme End_Error ausgelöst.

Modus Out_File oder Append_File:
Wenn "To" größer ist als die aktuelle Zeilennummer werden solange Zeilenumbrüche in die Datei geschrieben, bis die aktuelle Zeilennummer "To" ist. Wenn die aktuelle Zeilennummer "To" ist, werden keine Zeichen in die Datei geschrieben. Wenn der Wert von "To" kleiner ist als die aktuelle Zeilennummer wird die aktuelle Zeile beendet, wenn dies noch nicht geschehen ist, dann wird ein Seitenwechsel geschrieben und dann werden soviele Zeilenumbrüche geschrieben, bis die aktuelle Zeilennummer den Wert von "To" hat. Wenn der Wert von "To" größer ist als die maximale Seitenlänge, wird die Ausnahme Layout_Error ausgelöst.

function Col (File : in File_Type) return Positive_Count;
function Col return Positive_Count;
Col liefert die aktuelle Spaltennummer. Wenn diese größer ist als Count'Last, wird die Ausnahme Layout_Error ausgelöst.

function Line (File : in File_Type) return Positive_Count;
function Line return Positive_Count;
Line liefert die aktuelle Zeilennummer. Wenn diese größer ist als Count'Last, wird die Ausnahme Layout_Error ausgelöst.

function Page (File : in File_Type) return Positive_Count;
function Page return Positive_Count;
Page liefert die aktuelle Seitenzahl. Wenn diese größer ist als Count'Last, wird die Ausnahme Layout_Error ausgelöst.


Get und Put

Alle Prozeduren Get und Put bieten die Möglichkeit, als erstes einen Dateiparameter anzugeben, um die Datei zu spezifizieren, auf die zugegriffen werden soll. Wird dieser Dateiparameter nicht angegeben, wird auf die entsprechende Standarddatei zugegriffen.

Wird für Put ein Dateiparameter angegeben, so muß es sich um eine Datei handeln, die mit dem Modus Out_File oder Append_File geöffnet wurde. Get hingegen benötigt immer eine Datei, die mit dem Modus In_File geöffnet wurde.

Operationen für Ein- und Ausgabe von Zeichen und Zeichenketten

procedure Get (File : in File_Type; Item : out Character);
procedure Get (Item : out Character);
Liefert in "Item" das nächste Zeichen aus der Datei "File", das keinen Zeilenumbruch oder Seitenwechsel kennzeichnet. Beim Erreichen des Dateiendes wird die Ausnahme End_Error ausgelöst.

procedure Put (File : in File_Type; Item : in Character);
procedure Put (Item : in Character);
Schreibt das Zeichen aus "Item" in die Datei "File". Wenn die aktuelle Spaltennummer größer ist als die Zeilenlänge, wird vorher New_Line aufgerufen.

procedure Look_Ahead (File : in File_Type; Item : out Character;
End_Of_Line : out Boolean);
procedure Look_Ahead (Item : out Character; End_Of_Line : out Boolean);
Liest ein Zeichen im voraus aus der Datei "File". Die Datei muß mit dem Modus In_File geöffnet sein. Der Parameter "End_Of_Line" wird auf "Wahr" gesetzt, wenn das nächste Zeichen ein Zeilenumbruch, Seitenwechsel oder Dateiendezeichen ist. Dann ist der Wert von "Item" nicht definiert. Ansonsten wird "End_Of_Line" auf "Falsch" gesetzt und "Item" enthält das nächste Zeichen. Der Dateizeiger, also die Positionierung (Seite, Zeile, Spalte) wird durch diese Prozedur nicht verändert.

procedure Get_Immediate (File : in File _Type; Item : out Character);
procedure Get_Immediate (Item : out Character);
Die Prozedur Get_Immediate liefert das nächste Zeichen (auch Steuerzeichen) aus der Datei "File" in "Item" zurück. Die Datei muß mit dem Modus In_File geöffnet sein, sonst wird die Ausnahme Mode_Error ausgelöst. Die Positionierung innerhalb der Datei ändert sich nicht. Kann kein Zeichen gelesen werden, wird die Ausnahme End_Error ausgelöst.

procedure Get_Immediate (File : in File_Type; Item : out Character;
Available : out Boolean);
procedure Get_Immediate (Item : out Character; Available : out Boolean);
Wenn aus der Datei "File" ein Zeichen (auch Steuerzeichen) gelesen werden kann wird "Available" auf "Wahr" gesetzt und "Item" enthält den Wert des Zeichens, ansonsten ist "Available" "Falsch" und der Wert von "Item" ist nicht definiert.

procedure Get (File : in File_Type; Item : out String);
procedure Get (Item : out String);
Die Prozedur Get ermittelt die Länge der Zeichenkette "Item" und führt für jedes Zeichen innerhalb der Zeichenkette die Prozedur Get aus.

procedure Put (File : in File_Type; Item : in String);
procedure Put (Item : in String);
Die Prozedur Put ermittelt die Länge der Zeichenkette "Item" und führt für jedes Zeichen innerhalb der Zeichenkette die Prozedur Put aus.

procedure Get_Line (File : in File_Type; Item : out String;
Last : out Natural);
procedure Get_Line (Item : out String; Last : out Natural);
Die Prozedur Get_Line liest eine Zeichenfolge aus der Datei "File", bis entweder das Ende der Zeile innerhalb der Datei erreicht ist oder aber die Zeichenkette "Item" ganz gefüllt ist. In "Last" wird die Position innerhalb von "Item" zurückgegeben, die zuletzt gefüllt wurde, somit enthält der Zeichenkettenbereich von Item’First bis Last die gelesenen Zeichen.Wenn die Zeile länger war als die Zielzeichenkette verfallen die restlichen Zeichen und die aktuelle Dateiposition ist der Anfang der nächsten Zeile.

procedure Put_Line (File : in File_Type; Item : in String);
procedure Put_Line (Item : in String);
Ruft die Prozedur Put für die Zeichenkette "Item" und danach die Prozedur New_Line auf.tuelle Spaltennummer wird zuerst ein Zeilenumbruch geschrieben und dann mit Leerzeichen
aufgefüllt, bis die aktuelle Spaltennummer "To" ist. Wenn der Wert von "To" größer ist als die maximale Zeilenlänge, wird die Ausnahme Layout_Error ausgelöst.

procedure Set_Line (File : in File_Type ; To : in Positive_Count);
procedure Set_Line (To : in Positive_Count);
Modus In_File:
Wenn die aktuelle Zeilennummer ungleich dem Wert von "To" ist, werden solange Zeichen, Zeilenumbrüche und Seitenwechsel aus der Datei gelesen, bis die aktuelle Zeilennummer "To" ist. Wenn das Dateiende erreicht ist, wird die Ausnahme End_Error ausgelöst.

Modus Out_File oder Append_File:
Wenn "To" größer ist als die aktuelle Zeilennummer werden solange Zeilenumbrüche in die Datei geschrieben, bis die aktuelle Zeilennummer "To" ist. Wenn die aktuelle Zeilennummer "To" ist, werden keine Zeichen in die Datei geschrieben. Wenn der Wert von "To" kleiner ist als die aktuelle Zeilennummer wird die aktuelle Zeile beendet, wenn dies noch nicht geschehen ist, dann wird ein Seitenwechsel geschrieben und dann werden soviele Zeilenumbrüche geschrieben, bis die aktuelle Zeilennummer den Wert von "To" hat. Wenn der Wert von "To" größer ist als die maximale Seitenlänge, wird die Ausnahme Layout_Error ausgelöst.

function Col (File : in File_Type) return Positive_Count;
function Col return Positive_Count;
Col liefert die aktuelle Spaltennummer. Wenn diese größer ist als Count'Last, wird die Ausnahme Layout_Error ausgelöst.

function Line (File : in File_Type) return Positive_Count;
function Line return Positive_Count;
Line liefert die aktuelle Zeilennummer. Wenn diese größer ist als Count'Last, wird die Ausnahme Layout_Error ausgelöst.

function Page (File : in File_Type) return Positive_Count;
function Page return Positive_Count;
Page liefert die aktuelle Seitenzahl. Wenn diese größer ist als Count'Last, wird die Ausnahme Layout_Error ausgelöst.


Ein- und Ausgabe von Integer-Typen

Die Pakete Integer_IO und Modular_IO, die die Ein- und Ausgabeoperationen für Integer-Typen enthalten sind generische Pakete, die mit dem gewünschten Integer-Typ oder modularen Typ instantiiert werden müssen.

Zahlenwerte können entweder als Dezimalzahlen oder als Literale mit einer Basis zwischen 2 und 16 ausgegeben werden.

Typen und Variablen für Integer- Ein-/Ausgaben

subtype Number_Base is Integer range 2..16;
Definiert den Bereich, der bei der Ausgabe von Zahlen als Basis angegeben werden kann.

Default_Width : Field := Num'Width;
Definiert die Standardbreite einer auszugebenden Zahl.

Default_Base : Number_Base := 10;
Definiert die Standardbasis, die bei der Ausgabe einer Zahl verwendet werden soll.


Operationen Integer- Ein-/Ausgaben

procedure Get (File : in File_Type; Item : out Character);
procedure Get (Item : out Character);
Liefert in "Item" das nächste Zeichen aus der Datei "File", das keinen Zeilenumbruch oder Seitenwechsel kennzeichnet. Beim Erreichen des Dateiendes wird die Ausnahme End_Error ausgelöst.

procedure Put (File : in File_Type; Item : in Character);
procedure Put (Item : in Character);
Schreibt das Zeichen aus "Item" in die Datei "File". Wenn die aktuelle Spaltennummer größer ist als die Zeilenlänge, wird vorher New_Line aufgerufen.

procedure Look_Ahead (File : in File_Type; Item : out Character;
End_Of_Line : out Boolean);
procedure Look_Ahead (Item : out Character; End_Of_Line : out Boolean);
Liest ein Zeichen im voraus aus der Datei "File". Die Datei muß mit dem Modus In_File geöffnet sein. Der Parameter "End_Of_Line" wird auf "Wahr" gesetzt, wenn das nächste Zeichen ein Zeilenumbruch, Seitenwechsel oder Dateiendezeichen ist. Dann ist der Wert von "Item" nicht definiert. Ansonsten wird "End_Of_Line" auf "Falsch" gesetzt und "Item" enthält das nächste Zeichen. Der Dateizeiger, also die Positionierung (Seite, Zeile, Spalte) wird durch diese Prozedur nicht verändert.

procedure Get_Immediate (File : in File _Type; Item : out Character);
procedure Get_Immediate (Item : out Character);
Die Prozedur Get_Immediate liefert das nächste Zeichen (auch Steuerzeichen) aus der Datei "File" in "Item" zurück. Die Datei muß mit dem Modus In_File geöffnet sein, sonst wird die Ausnahme Mode_Error ausgelöst. Die Positionierung innerhalb der Datei ändert sich nicht. Kann kein Zeichen gelesen werden, wird die Ausnahme End_Error ausgelöst.

procedure Get_Immediate (File : in File_Type; Item : out Character;
Available : out Boolean);
procedure Get_Immediate (Item : out Character; Available : out Boolean);
Wenn aus der Datei "File" ein Zeichen (auch Steuerzeichen) gelesen werden kann wird "Available" auf "Wahr" gesetzt und "Item" enthält den Wert des Zeichens, ansonsten ist "Available" "Falsch" und der Wert von "Item" ist nicht definiert.

procedure Get (File : in File_Type; Item : out String);
procedure Get (Item : out String);
Die Prozedur Get ermittelt die Länge der Zeichenkette "Item" und führt für jedes Zeichen innerhalb der Zeichenkette die Prozedur Get aus.

procedure Put (File : in File_Type; Item : in String);
procedure Put (Item : in String);
Die Prozedur Put ermittelt die Länge der Zeichenkette "Item" und führt für jedes Zeichen innerhalb der Zeichenkette die Prozedur Put aus.

procedure Get_Line (File : in File_Type; Item : out String;
Last : out Natural);
procedure Get_Line (Item : out String; Last : out Natural);
Die Prozedur Get_Line liest eine Zeichenfolge aus der Datei "File", bis entweder das Ende der Zeile innerhalb der Datei erreicht ist oder aber die Zeichenkette "Item" ganz gefüllt ist. In "Last" wird die Position innerhalb von "Item" zurückgegeben, die zuletzt gefüllt wurde, somit enthält der Zeichenkettenbereich von Item’First bis Last die gelesenen Zeichen.Wenn die Zeile länger war als die Zielzeichenkette verfallen die restlichen Zeichen und die aktuelle Dateiposition ist der Anfang der nächsten Zeile.

procedure Put_Line (File : in File_Type; Item : in String);
procedure Put_Line (Item : in String);
Ruft die Prozedur Put für die Zeichenkette "Item" und danach die Prozedur New_Line auf.tuelle Spaltennummer wird zuerst ein Zeilenumbruch geschrieben und dann mit Leerzeichen aufgefüllt, bis die aktuelle Spaltennummer "To" ist. Wenn der Wert von "To" größer ist als die maximale Zeilenlänge, wird die Ausnahme Layout_Error ausgelöst.

procedure Set_Line (File : in File_Type ; To : in Positive_Count);
procedure Set_Line (To : in Positive_Count);
Modus In_File:
Wenn die aktuelle Zeilennummer ungleich dem Wert von "To" ist, werden solange Zeichen, Zeilenumbrüche und Seitenwechsel aus der Datei gelesen, bis die aktuelle Zeilennummer "To" ist. Wenn das Dateiende erreicht ist, wird die Ausnahme End_Error ausgelöst.

Modus Out_File oder Append_File:
Wenn "To" größer ist als die aktuelle Zeilennummer werden solange Zeilenumbrüche in die Datei geschrieben, bis die aktuelle Zeilennummer "To" ist. Wenn die aktuelle Zeilennummer "To" ist, werden keine Zeichen in die Datei geschrieben. Wenn der Wert von "To" kleiner ist als die aktuelle Zeilennummer wird die aktuelle Zeile beendet, wenn dies noch nicht geschehen ist, dann wird ein Seitenwechsel geschrieben und dann werden soviele Zeilenumbrüche geschrieben, bis die aktuelle Zeilennummer den Wert von "To" hat. Wenn mder Wert von "To" größer ist als die maximale Seitenlänge, wird die Ausnahme Layout_Error ausgelöst.

function Col (File : in File_Type) return Positive_Count;
function Col return Positive_Count;
Col liefert die aktuelle Spaltennummer. Wenn diese größer ist als Count'Last, wird die Ausnahme Layout_Error ausgelöst.

function Line (File : in File_Type) return Positive_Count;
function Line return Positive_Count;
Line liefert die aktuelle Zeilennummer. Wenn diese größer ist als Count'Last, wird die Ausnahme Layout_Error ausgelöst.

function Page (File : in File_Type) return Positive_Count;
function Page return Positive_Count;
Page liefert die aktuelle Seitenzahl. Wenn diese größer ist als Count'Last, wird die Ausnahme Layout_Error ausgelöst.


Ein-/Ausgabe von reellen Typen

Für die Ein- und Ausgabe von reellen Typen existieren drei Pakete:
  • Float_IO für Gleitpunkttypen,
  • Fixed_IO für Festpunkttypen und
  • Decimal_IO für dezimale Festpunkttypen.
Die Ausgabe erfolgt abhängig vom angegebenen Exponenten:
Exponent gleich 0:
Vorkommastellen . Nachkommastellen

Exponent ungleich 0:
Vorkommastellen . Nachkommastellen E Exponent

Das Vorkommastellenfeld kann neben Ziffern auch führende Nullen und ein Vorzeichen enthalten. Das Nachkommastellenfeld enthält nur Ziffern. Das Exponentenfeld enthält ein Vorzeichen und den Exponenten.


Typen und Variablen für die Ein-/Ausgabe von reelwertigen Typen

für Float_IO:
Default_Fore : Field := 2;
Standardmäßige Anzahl Stellen vor dem Punkte ist 2.

Default_Aft : Field := Num'Digits-1;
Standardmäßige Anzahl Stellen hinter dem Punkt ist Anzahl Ziffern - 1.

Default_Exp : Field := 3;
Standardmäßige Anzahl Stellen für den Exponenten ist 3.

für Fixed_IO und Decimal_IO:
Default_Fore : Field := Num'Fore;
Standardmäßige Anzahl Stellen vor dem Punkt ist gleich der für den Typ definierten Anzahl Stellen vor dem Punkt.

Default_Aft : Field := Num'Aft;
Standardmäßige Anzahl Stellen hinter dem Punkt ist gleich der für den Typ definierten Anzahl Stellen hinter dem Punkt.

Default_Exp : Field := 0;
Standardmäßige Anzahl Stellen für den Exponenten ist 0, da diese Werte normalerweise dezimal ausgegeben werden sollen.


Operationen für die Ein-/Ausgabe von reelen Typen

procedure Get (File : in File_Type; Item : out Num; Width : in Field := 0);
procedure Get (Item : out Num; Width : in Field := 0);
Get liest einen Zahlenwert aus "File" und speichert ihn in "Item".

Für "Width" gleich 0:
Führende Leerzeichen, Zeilenumbrüche und Seitenwechsel werden übersprungen, dann wird die längstmögliche Zeichenfolge gelesen, die einem der nachfolgenden Muster entspricht:
[+/-]numerisches Literal
[+/-]Zahl.[Exponent]
[+/-].Zahl[Exponent]
[+/-]Basis#basiertes Literal.#[Exponent]
[+/-]Basis#.basiertes Literal#[Exponent]

Für "Width" größer 0:
Es werden maximal "Width" Zeichen gelesen. Wird vorher ein Zeilenumbruch erreicht ,wird das Lesen der Zahl hier abgebrochen.

Wenn eine Zahl eingegeben wird, die mit dem verwendeten Typ nicht vereinbar ist, wird die Ausnahme Data_Error ausgelöst.

procedure Put (File : in File_Type; Item : in Num;
Fore : in Field := Default_Fore;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp);
procedure Put (Item : in Num; Fore : in Field := Default_Fore;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp);
Gibt den Wert aus "Item" in die Datei "File" aus. Die Formatierung entspricht den Parametern "Fore", "Aft" und "Exp". Wenn die Anzahl Stellen vor dem Komma kleiner ist als "Fore", so wird die Ausgabe links mit Leerzeichen aufgefüllt. Wenn die Anzahl der Nachkommastellen zu klein ist, wird sie rechts mit Nullen aufgefüllt. Wenn der Exponent zuwenig Stellen hat, wird er mit Nullen aufgefüllt. Wenn die Anzahl Stellen vor dem Punkt zu groß ist, so wird der Wert in "Fore" ignoriert und die gesamte Zahl geschrieben.

procedure Get (From : in String; Item : out Num; Last : out Positive);
Liest eine reelle Zahl aus der Zeichenkette "From" und gibt diese in "Item" zurück. Das Ende der Zeichenkette ist auch spätestens das Ende der Zahl. Vor der Zahl liegende Leerzeichen werden übersprungen. Die Form der Zahl muß den gleichen Anforderungen entsprechen wie
bei der Prozedur Get für den Dateizugriff.

procedure Put (To : out String; Item : in Num;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp);
Gibt den Wert von "Item" in die Zeichenkette "To" aus. Die Parameter "Aft" und "Exp" enthalten die Anzahl Stellen hinter dem Punkt und für den Exponenten. Die Anzahl Stellen vor dem Punkt wird berechnet, so daß die Zeichenkette komplett ausgefüllt wird.


Ein-/Ausgabeoperationen für Aufzählungstypen

Für Ein- und Ausgabe von Aufzählungstypen existiert das generische Paket Enumeration_IO. Dieses Paket muß zuvor mit dem entsprechenden Aufzählungstyp instantiiert werden.

Die Werte aus den Aufzählungstypen können entweder in Groß- oder in Kleinschreibung ausgegeben werden. Zur Auswahl gibt es den Typen Type_Set:
type Type_Set is (Lower_Case, Upper_Case);

Variable für Ein-/Ausgabe von Aufzählungstypen

Default_Width : Field := 0; Standardbreite eines Eintrages.

Default_Setting : Type_Set := Upper_Case; Standardeinstellung für die Ausgabe in großen oder kleinen Buchstaben.


Operationen für Ein-/Ausgabe von Aufzählungstypen

procedure Get (File . in File_Type; Item : out Enum);
procedure Get (Item : out Enum);
Die Prozedur Get liest den Wert für einen Aufzählungstyp aus der Datei "File" und speichert ihn in "Item". Dabei werden führende Leerzeichen, Zeilenumbrüche und Seitenwechsel übersprungen. Wenn die Zeichenfolge keinem möglichen Wert des Aufzählungstyps mentspricht, wird die Ausnahme Data_Error ausgelöst.

procedure Put (File : in File_Type; Item : in Enum;
Width : in Field := Default_Width;
Set : in Type_Set := Default_Setting);
procedure Put (Item : in Enum; Width : in Field := Default_Width;
Set : in Type_Set := Default_Setting);
Die Prozedur Put schreibt den aktuellen Wert des Aufzählungstyps "Item" in die Datei "File". Hierbei kann optional die Breite des Ausgabefeldes ("Width") und ein Parameter zur Auswahl zwischen Groß- und Kleinschreibung ("Set") angegeben werden. Wenn die Werte des Aufzählungstypen vom Typ Character sind, hat der Parameter "Set" keine Wirkung.

procedure Get (From : in String; Item : out Enum; Last : out Positive);
Liest den Wert des Aufzählungstyps aus der Zeichenkette "From" und speichert ihn in "Item". In "Last" wird die letzte Position der Zeichenkette zurückgegeben, die zur Festlegung des Wertes verwendet wurde. Wenn aus der Zeichenkette kein Wert für den Aufzählungstyp festgelegt werden kann, wird die Ausnahme Data_Error ausgelöst.

procedure Put (To : out String; Item : in Enum;
Set : in Type_Set := Default_Setting);
Schreibt den Wert des Aufzählungstyps "Item" in die Zeichenkette "To". Sollte der Name des Wertes länger sein als die Zeichenkette, wird die Ausnahme Layout_Error ausgelöst.


Ein-/Ausgabe für Wide_Character

Das Paket Wide_Text_IO bietet dieselbe Funktionalität wie das Paket Text_IO, abgesehen davon ,daß es nicht mit Zeichen vom Typ Character, sondern mit Zeichen vom Typ Wide_Character arbeitet.
Wide_Text_IO hat dieselben Unterpakete wie Text_IO.
Ein-/Ausgabe für Streams

Für den Stream-orientierten Zugriff auf Dateien existieren die Pakete Streams.Stream_IO, Text_IO.Text_Streams und Wide_Text_IO.Text_Streams.

Das Paket Stream_IO ist für Dateizugriffe auf Stream-Dateien zuständig. Der Zugriff auf Stream-Dateien erfolgt entweder sequentiell, über Aufrufe von Read oder Write zum Übertragen einer Reihung von Stream-Elementen, oder per Direktzugriff durch Eingabe eines Index, wenn dies für den entsprechenden Dateityp von der Implementierung angeboten wird.

Die Unterprogramme Create, Open, Close, Delete, Reset, Mode, Name, Form, Is_Open und End_Of_File haben die gleichen Funktionen wie die gleichnamigen Funktionen des Pakets Sequential_IO.

Die Unterprogramme Read und Write haben die gleichen Funktionen wie die gleichnamigen Prozeduren des Pakets Streams. Die Prozedur Read löst die Ausnahme Mode_Error aus, wenn die Datei nicht den Modus In_File hat, Write, wenn die Datei nicht den Modus Out_File oder Append_File hat. Den Prozeduren Read und Write kann in den Parametern "From" und "To" jeweils eine Indexposition übergeben werden, an der dann der Lese- bzw. Schreibvorgang gestartet wird.

Wenn der Direktzugriff auf eine Stream-Datei nicht unterstützt wird, wird bei einem Aufruf von Index und Set_Index und beim Aufruf von Read und Write mit Positionierungsparameter die Ausnahme Use_Error ausgelöst.

function Stream (File : in File_Type) return Stream_Access;
Die Funktion Stream liefert einen Stream-Zeiger (Typ Stream_Access) für die Datei "File", der die Stream-orientierten Attribute Read, Write, Input und Output zum Zugriff auf eine Datei für mehrere Typen erlaubt.

function Index (File : in File_Type) return Positive_Count;
Liefert die aktuelle Indexposition in der Datei "File". Die Position wird in Stream-Elementen
angegeben. Das erste Element in der Datei hat die Position 1.

procedure Set_Index (File : in File_Type; To : in Positive_Count);
Setzt die Indexposition der Datei "File" auf den Wert "To".

function Size (File : in File_Type) return Count;
Die Funktion Size liefert die Größe der Datei "File" in Stream-Elementen.

procedure Set_Mode (File : in out File_Type; Mode : in File_Mode);
Die Prozedur Set_Mode ändert den Modus der Datei "File" auf "Mode". Wenn der neue Modus Append_File ist, wird der Indexzeiger der Datei ans Ende gesetzt, andernfalls bleibt die Position in der Datei unverändert.

procedure Flush (File : in out File_Type);
Die Prozedur Flush synchronisiert die externe mit der internen Datei, indem alle internen
Puffer in die Datei geschrieben werden. Hierbei wird die aktuelle Position in der Datei nicht geändert. Wenn der Modus der Datei nicht In_File ist, wird die Ausnahme Mode_Error ausgelöst.

Mit der Hilfe des Pakets Text_IO.Text_Streams kann eine Textdatei wie ein Stream verwendet werden.

Das Paket Wide_Text_IO.Text_Streams hat die gleiche Funktionalität wie das Paket Text_IO.Text_Streams, bezieht sich aber auf Texte, die aus Wide_Character-Zeichen bestehen.

function Stream (File : in File_Type) return Stream_Access;
Die Funktion Stream hat die gleiche Funktion wie die Funktion Stream aus dem Paket Streams.Stream_IO, abgesehen davon, daß hier Textdateien für Stream-Funktionen zugänglich gemacht werden.


Spezifikationen der Pakete

"Ada.Streams"
"Ada.Streams.Streams_IO"
"Ada.Text_IO"
"Ada.Text_IO.Text_Streams"
"Ada.Wide_Text_IO"
"Ada.Wide_Text_IO.Text_Streams"


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