Bemerkung:
Die Angaben gelten weitgehend analog auch für die Ein- und Ausgabe
mit internen Dateien in Extended Pascal.
Ausgabe
Ausgabe einer Textzeile
Writeln(datei_variable, wert_1, ..., wert_n);Die in der Ausgabeliste angegebenen Werte werden in die Datei geschrieben, die an datei_variable gebunden ist.
Wird datei_variable nicht angegeben, so wird auf die Standardausgabe
(OUTPUT) geschrieben.
wert_1, ..., wert_n ist eine beliebig lange Liste von Ausdrücken.
Diese Liste darf leer sein.
Alternativ könnte auch die Anweisungsfolge
Write(datei_variable, wert_1);
...
Write(datei_variable, wert_n);
Writeln(datei_variable);
angewendet werden.
Hinsichtlich des Typs der Ausdrücke in der Ausgabeliste bestehen einige
Einschränkungen.
Möglich sind in jedem Fall:
Jedem Wert in der Ausgabeliste kann wahlweise ein Format-Deskriptor nachgestellt werden:
wert : format_deskriptorEin Format-Deskriptor kann eine der beiden folgenden Gestalten annehmen:
w ganze Zahl, w <> 0
Ausgabeweite: es werden mindestens w Zeichen ausgegeben
d ganze Zahl,
Anzahl der Nachkommastellen bei reellen Zahlen
Wird kein Format-Deskriptor angegeben, so wird ein implementationsspezifisches
Standardformat verwendet.
Erfordert die Ausgabe eines Wertes weniger Stellen als mit der Ausgabeweite
w gefordert, so wird mit Leerzeichen aufgefüllt.
Die Ausrichtung der Zeichen erfolgt im allgemeinen rechtsbündig,
d.h. es werden führende Leerzeichen eingefügt.
Erfordert die Ausgabe eines Wertes mehr Stellen als mit der Ausgabeweite w gefordert, so wird implementationsspezifisch verfahren:
XL-Pascal Gnu-Pascal Turbo-Pascal Delphi
INTEGER 12 10 minimal minimal
CHAR 1 1 1 1
BOOLEAN 10 6 minimal minimal
REAL 20 14 17:11
SHORTREAL 20
Bei PACKED ARRAY[1..n] OF CHAR werden n Zeichen ausgegeben,
bei STRING(n) oder STRING[n] alle der aktuellen Länge
entsprechenden Zeichen, also maximal n Zeichen. Turbo Pascal gibt nur soviele Zeichen aus, wie für jeweils notwendig empfunden werden. Dies ist platzsparend, führt jedoch dazu, daß Tabellen fast immer mit Hilfe von Format-Deskriptoren aufgebaut werden müssen.
Die Angabe einer negativen Ausgabeweite w kann bei einigen Pascal-Systemen (z.B. Turbo Pascal) zu einer anderen Strategie beim Auffüllen mit Leerzeichen fü:hren: Die Zeichen werden nicht rechtsbündig, sondern linksbündig angeordnet.
Bei fehlender Angabe von Format-Deskriptoren sind die von verschiedenen
Pascal-Systemen erstellten Textdateien nicht identisch !
Die Dateien unterscheiden sich nicht in der Anzahl der erzeugten Zeilen, wohl
aber in der Zeilenstruktur !
Beispiel:
PROGRAM fmt(OUTPUT);
VAR i : INTEGER;
r : REAL;
b : BOOLEAN;
c : PACKED ARRAY[1..10] OF CHAR;
s : STRING(10); { systemabhängig }
BEGIN
i := 11;
Writeln('|', i, '|', i:5, '|');
r := 12.345;
Writeln('|', r, '|', r:10:2, '|', r:4:2, '|');
b := TRUE;
Writeln('|', b, '|', b:8, '|', b:2, '|');
c := '1234567890';
Writeln('|', c, '|', c:8, '|', c:2, '|');
s := 'Test';
Writeln('|', s, '|', s:8, '|', s:2, '|');
END.
Das Programm erzeugt folgende Ausgaben: | 11| 11| | 1.2345000e+01| 1.235e+01| 1.2e+01| | True| True|Tr| |1234567890|12345678|12| |Test| Test|Te|Pascal++
| 11| 11| | 1.2E+001| 12.35|*****| irreguläres Programmverhalten | TRUE| TRUE|TRUE| |1234567890|12345678|12| |Test| Test|Te|XL-Pascal
| 11| 11| | 1.234500000000E+001| 12.35|12.35| | TRUE| TRUE|TR| |1234567890|12345678|12| |Test| Test|Te|Turbo Pascal 7.0
|11| 11| | 1.2345000000E+01| 12.35|12.35| |TRUE| TRUE|TRUE| |1234567890|1234567890|1234567890| |Test| Test|Test|Bemerkung:
Writeln(datei_variable);bewirkt die Ausgabe einer Leerzeile.
Writeln(OUTPUT, ...) entspricht Writeln(...).
Ausgabe von Teilen einer Textzeile
Write(datei_variable, wert_1, ..., wert_n);Write arbeitet im wesentlichen genau wie Writeln, nur daß die Ausgabe nicht mit einem Zeilenwechsel abgeschlossen wird.
Die obige Zeile entspricht der Anweisungsfolge
Write(datei_variable, wert_1);
...
Write(datei_variable, wert_n);
Seitenwechsel
Page(datei_variable);Page realisiert die Ausgabe des Steuerzeichens für den Seitenvorschub (form feed).
Der Seitenwechsel ist nur von Bedeutung bei der Ausgabe von Textdateien auf
einen Drucker (oder ein vergleichbares Gerät).
Bei der Bildschirmausgabe wird ein Seitenwechsel nicht wirksam (eventuell
erscheint eine Leerzeile).
Eingabe
Eingabe einer Textzeile
Readln(datei_variable, var_1, ..., var_n);Die in der Eingabeliste enthaltenen Variablen var_1, ..., var_n werden mit den in einer Textzeile enthaltenen Werten belegt. Die Eingabe wird mit einem Zeilenwechsel abgeschlossen wird.
Die obige Zeile entspricht der Anweisungsfolge
Read(datei_variable, var_1);
...
Read(datei_variable, var_n);
Mehrere Werte innerhalb einer Zeile werden durch Leerzeichen (oder Tabulatoren)
voneinander getrennt.
Die Anwendung von Format-Deskriptoren in Zusammenhang mit der Eingabe wird
durch die Pascal-Standards nicht unterstützt.
Sie ist jedoch z.B. in XL-Pascal realisiert: Der Format-Deskriptor besteht
aus der Eingabeweite w.
Beispiel:
VAR i : INTEGER;
r : REAL;
s : STRING(10);
BEGIN
Read(i:2, r:3, s); { !! Spracherweiterung !! }
Writeln('|', i, '|', r, '|', s, '|');
END;
Die Eingabe
123456789liefert unter XL-Pascal
| 12| 3.450000000000E+002|6789|Eingabe von Teilen einer Textzeile
Read(datei_variable, var_1, ..., var_n);Read arbeitet im wesentlichen genau wie Readln, nur daß die Ausgabe nicht mit einem Zeilenwechsel abgeschlossen wird.
Die obige Zeile entspricht der Anweisungsfolge
Read(datei_variable, var_1);
...
Read(datei_variable, var_n);