Dies ist eine alte Version des Dokuments!


Ein- und Ausgabe

Ein- und Ausgabe ist eine sehr wichtige Aufgabe der meisten Programme, schließlich wollen wir Ergebnisse von Berechnungen auch am Bildschirm sehen. Wir beginnen bei den einfachen Ein- und Ausgabeoperationen, danach werden wir weitere Parameter an die Ein- bzw. Ausgabe stellen.

Anweisungen

Die einfachsten Anweisungen für die Ein- und Ausgabe sind jeweils READ bzw. WRITE mit Standardparameter (*). Bspw.

integer a, b
READ (*,*) a, b
WRITE (*,*) a

Sie sehen zwei Sterne als Platzhalter für Parameter an die Eingabe / Ausgabe. Der erste Parameter gibt die Unit (Ausgabedatei) an, in die geschrieben werden soll / von der gelesen werden soll, beim zweiten Parameter lassen sich einige Anforderungen an die Ein- / Ausgabe stellen.

Es gibt noch eine weitere Anweisung PRINT, die allerdings in neuen Programmen nicht mehr eingesetzt werden sollte. Stattdessen sollte WRITE verwendet werden, was vielseitiger einsetzbar ist. Der Stern bei PRINT ist mit dem zweiten Stern von WRITE gleichzusetzen; PRINT schreibt automatisch nach stdout (UNIT 6)

PRINT *, a

Formale Parameterliste

(READ | WRITE) ([UNIT=]<Unit-Nr>, [FMT=]<formatstring>][,END=<endmarke>][,ERR=<errmarke>][,IOSTAT=<ivar>][,REC=iasudr]) ioliste
Parameter Bedeutung Beispiel
UNIT gibt die Unitnummer an; eine Unitnummer ist eine logische Dateinummer (0 bis X), die einer Datei zugeordnet ist.
Gibt es die Datei noch nicht, wird eine Datei angelegt nach dem Schema „<programmname>.<Unitnr>“
WRITE (6, *) a
WRITE (2, *)
FMT Formatstring oder Marke, an der der Formatstring zu finden ist. Ein Formatstring gibt die Art und Weise an, wie die ioliste auszugeben ist.
WRITE (*, '(A,$)') a ! a ist ein String
! nach der Ausgabe wird kein Newline angehängt 
! (Cursor bleibt auf der Seite stehen)
END Marke, an die gesprungen wird, wenn das Dateienede beim Lesen erreicht wurde
READ (x, END=120) a
120 CONTINUE
ERR Marke, an die gesprungen wird, wenn ein Fehler auftritt (bspw. unpassende Eingabe, Zugriffsrechte, etc.)
READ (x, ERR=150) a
150 CONTINUE
IOSTAT Zustandsvariable; die angegebene Variable wird nach der E/A-Operation gesetzt, entsprechend dem Fehlerzustand. Bei fehlerfreier E/A → ivar=0
READ (x, IOSTAT=meineVar) a, b, c
REC Bei Direktzugriff: Nummer des Datensatzes
ioliste Eine Liste von Parametern (Variablen), die ausgegeben bzw. in die eingelesen werden soll.
READ (*,*) a,b,c

Warum wird ein Leerzeichen vor dem eigentlichen String ausgegeben?

Wie Sie in vorherigen Programmen sicher schon gemerkt haben, wird bei der Ausgabe normalerweise ein Leerzeichen dem eigentlichen auszugebendenen String vorangestellt. Bspw. bei unserem ersten Programm, dem Hello-World-Programm:

	PROGRAM HELLO_WORLD
		write (*,*) "Hello World"
	END

Die Ausgabe ergab:

 Hello World

Wo kommt das Leerzeichen her? Fortran ist eine sehr alte Programmiersprache, die bereits existierte als so genannte Line Printer modern waren, also Drucker, die eine Zeile ausgegeben haben. Um einen solchen Drucker steuern zu können, bedurfte es einem Zeichen am Anfang der Zeile, welches angab, was der Drucker zu tun hatte. Dieses Zeichen nennt sich ASA Carriage Control Characters. So konnte u.A. eingestellt werden, dass der Drucker nur eine Zeile weiterfuhr (Standard), zwei Zeilen oder überhaupt nicht, sodass man bspw. durch Unterstriche eine Unterstreichung der gerade gedruckten Worte erzeugen konnte.

Heutige Compiler geben diese Zeichen einfach aus. Da heutige Drucker auf solche Zeichen nicht mehr reagieren bzw. diese Zeichen heutzutage keinen echten Wert mehr haben, können sie bei Ihren Programmen weggelassen werden.

Im nächsten Kapitel wenden wir uns (dazu) den Formatstrings zu.