Neben der bisher vorgestellten Ein-/Ausgabe im freien Format (listengesteuert) gibt es die formatierte oder formatgesteuerte Ein-/Ausgabe. Dabei wird bei Abarbeitung der Ein-/Ausgabeliste jedem Element der Liste die zugehörige Datenfeldbeschreibung aus der Formatangabe (z.B. FORMAT-Anweisung, s.u.) zugeordnet und das Element entsprechend ausgegeben.
Beispiel (seien i, j, k ganzzahlig):
PRINT 999, i, j, k
999 FORMAT (I4, I2, I5)
Die Integer-Variablen i, j und k werden entsprechend der Formatangabe mit der Marke 999 als 4-, 2- bzw. 5-stellige ganze Zahlen hintereinander in einer Zeile ausgegeben. Dabei ist zu beachten, daß die Formatangaben und die auszugebenden Daten vom Typ her stets zusammenpassen (im obigen Fall: ganzzahlig).
Die Formatbeschreibung wird bis zum Ende der Ein-/Ausgabeliste abgearbeitet. Reicht die Formatbeschreibung nicht aus, wird das Format wiederholt, und dabei wird eine neue Zeile begonnen.
Bei der formatierten Ein-/Ausgabe werden die Daten entsprechend den Formatangaben gelesen und in die interne binäre Darstellung (rechnerabhängig) konvertiert bzw. aus dieser internen Darstellung in Zeichenfolgen umgewandelt. Formatangaben sind in runde Klammern eingeschlossene Zeichenfolgen, die alternativ unter anderem angegeben werden können durch
Wir werden hier nur auf die erste Möglichkeit eingehen. Es können sich mehrere Ein-/Ausgabeanweisungen auf die gleiche Formatangabe beziehen.
Die Format-Anweisung
labl FORMAT( flist )
ist eine nichtausführbare Anweisung, die die Konvertierung und Formatierung der zu übertragenden Daten festlegt. Dabei ist labl eine Anweisungsmarke und flist eine Liste von durch Komma getrennten Elementen der Form
r ed, ned, r(flist)
ed und ned sind wiederholbare bzw.
nichtwiederholbare Datenfeldbeschreibungen
und die Wiederholungszahl ist eine
ganzzahlige Konstante
0. Fehlt
,
wird der Wert 1 angenommen.
In den Tabellen 4.2 und 4.3 geben Großbuchstaben die Konvertierungsart an, und kleine Buchstaben bezeichnen vom Programmierer hinzuzufügende Informationen:
|
Das Ausgabefeld wird bei allen Umwandlungen rechtsbündig aufgefüllt.
Es folgt eine kurze Beschreibung der wichtigsten Datenfeldbeschreibungen (auch: Formatspezifikationen).
Das A-Format dient zur Ein-/Ausgabe von Zeichengrößen und hat die Form
A oder Aw
Ist w kleiner als die Länge der Zeichengröße, dann werden die ersten w Zeichen ausgegeben bzw. die am weitesten rechtsstehenden Zeichen eingelesen, und der Rest wird jeweils ignoriert. Falls w größer als die Länge der Zeichengröße ist, dann wird linksbündig in den Speicher eingelesen bzw. rechtsbündig ausgegeben, und der Rest wird mit Leerzeichen aufgefüllt. Wird keine Datenfeldweite angegeben, wird die Länge der Zeichengröße benutzt.
Innerhalb der Formatangabe auszugebende Zeichenfolgen werden im Apostroph-Format angegeben, d.h. in Apostrophe eingeschlossen.
Beispiel:
CHARACTER :: what*5 what = 'ALLES' PRINT 120, what 120 FORMAT (' Ich will', A7)
ergibt die Bildschirm-Ausgabe:
Spalte: 1234567890123456 Zeichen: Ich will ALLES
Zur Ein-/Ausgabe von reellen Zahlen gibt es u.a. das F-Format und das E-Format. Die einfachste Form dieser Formate ist
Fw.d bzw. Ew.d
Bei der Ausgabe im E-Format wird ein Exponent gedruckt; die Verwendung des F-Formats führt zur Ausgabe einer reellen Zahl ohne Exponent.
Bei der Eingabe werden genau w Zeichen
eingelesen. Es können auch Zahlen im
jeweils anderen Format eingelesen werden,
z.B. kann man mit dem F-Format
auch Zahlen lesen, die im E-Format auf
dem Datensatz stehen. Reelle Zahlen
sollten im Eingabebereich stets mit
Dezimalpunkt geschrieben werden. Bei der
Ausgabe im E-Format in der oben
angegebenen Form hat der Exponent stets
zwei Stellen plus ein Vorzeichen, d.h. zur
Darstellung des Exponenten werden von
der gesamten Feldweite w vier Stellen
verwendet. Die Mantisse ist stets: 0.1
Mantisse
(Ausnahme: Die
Zahl Null), und der Exponent wird
entsprechend angeglichen. Allgemein
muß die Feldweite so groß
sein, daß alle Zeichen auch
ausgegeben werden können. Dies gilt
insbesondere für das F-Format. Falls w
zu klein gewählt wird, werden
w Sterne gedruckt. Falls w zu
groß ist, wird rechtsbündig
ausgegeben und mit Leerzeichen
aufgefüllt.
Beispiel:
REAL :: alfa alfa = -3.98E+03 PRINT 910 ,(alfa, i = 1,5) 910 FORMAT (' ', F8.2, F5.0, E10.3, E8.1, E6.1)
erzeugt die Ausgabe (auf einer Datei):
Spalten: 12345678901234567890123456789012345678 Zeichen: -3980.00***** -.398E+04 -.4E+04******
Das erste Zeichen der Ausgabezeile ist ein sogenanntes Vorschubsteuerzeichen für den Drucker. Wir werden darauf später eingehen. Die beiden ersten Formatspezifikationen geben alfa ohne Exponent aus, die anderen drei bewirken eine Ausgabe mit Exponent. Die Feldweiten des 2. und 5. Formats sind zu klein um die notwendigen Zeichen aufzunehmen, daher werden Sterne gedruckt. Das vierte Format verwendet nur eine Stelle für die Mantisse, die daher gerundet wird.
Die Ausgabe ganzzahliger Variabler mit E- oder F-Format produziert nicht vorhersehbare Ergebnisse, da ganze und reelle Zahlen intern unterschiedlich dargestellt werden (siehe Kapitel 5).
Zur Ein-/Ausgabe ganzer Zahlen dient das I-Format:
Iw
Bei der Eingabe werden genau w Zeichen eingelesen. Die Zahl sollte rechtsbündig geschrieben werden, da abhängig von der Voreinstellung des Compilers Leerzeichen als Nullen interpretiert werden können. Standard ist, daß Leerzeichen ignoriert werden. Ein vollständig leeres Feld wird jedoch als Null interpretiert. Dezimalpunkte sind verboten. Die Ausgabe erfolgt ohne Dezimalpunkt. Für negative Zahlen wird das Vorzeichen unmittelbar vor die erste Ziffer gedruckt.
Beispiel:
INTEGER :: izahl1, izahl2 izahl1 = -123 izahl2 = +45678 PRINT 117, izahl1, izahl2 117 FORMAT (' ', 2I4)
erzeugt die Ausgabe
Spalten: 1234567890 Zeichen: -123****
Die zweite Datenfeldbeschreibung ist zu klein, es werden vier Sterne ausgegeben.
Das L-Format wird benutzt, um logische Daten ein- oder auszugeben:
Lw
Bei der Eingabe wird dem logischen
Listenelement der Wert .TRUE. oder .FALSE.
zugeordnet, wenn die ersten von
Leerzeichen verschiedenen Zeichen T oder
.T bzw. F oder .F sind. Bei der Ausgabe
werden .TRUE. und .FALSE.
rechtsbündig mit führenden
Leerzeichen als T bzw. F ausgegeben.
Beispiel:
LOGICAL :: ok, ko ok = .TRUE. ko = .FALSE. PRINT 135, ok, ko 135 FORMAT (' ', 2L3)
erzeugt die Ausgabe:
Spalten: 1234567890 Zeichen: T F
Der Schrägstrich / (,,Slash``) innerhalb einer Formatangabe zeigt das Ende des letzten und den Beginn eines neuen Datensatzes an, es wird also eine neue Zeile begonnen.
Das X-Format wird verwendet, um Zeichen zu überspringen. Seine Form ist
nX
und ist eine ganze Zahl
0, die die
Anzahl der zu überspringenden
Zeichenpositionen angibt, ausgehend von
der augenblicklichen Position. Bei der
Ausgabe werden übersprungene noch
nicht gefüllte Positionen des
Datensatzes mit Leerzeichen gefüllt.
Das X-Format sollte besser durch
das allgemeinere
Tabulatorformat T, insbesondere den
Rechtstabulator TRn ersetzt werden.
Einzelne Formatspezifikationen oder ganze Gruppen können durch Angabe eines Wiederholungsfaktors wiederholt werden. Gruppen werden dabei in Klammern eingeschlossen.
Beispiel:
102 FORMAT (3I4, 2(1X, 2F6.1))
entspricht:
102 FORMAT (I4, I4, I4, 1X, F6.1, F6.1, 1X, F6.1, F6.1)
Das erste Zeichen eines jeden Datensatzes wird bei der Ausgabe auf manchen Druckern nicht ausgedruckt sondern zur Verschubsteuerung benutzt. Bei anderen Ausgabemedien gehört es zu den Daten. Es gibt drei Zeichen, die besondere Aktionen des Druckers bewirken können:
0 eine Leerzeile vor dem Drucken
1 Vorschub auf den Anfang einerneuen Seite
+ kein Vorschub, in der gleichenZeile weiterdrucken.
Um einer eventuellen Fehlinterpretation der Daten in der ersten Spalte jedes Datensatzes beim Fortlassen der Vorschubzeichen aus dem Weg zu gehen,sollte bei der Ausgabe das erste Zeichen jeder Zeile ein Leerzeichen sein. Dieses Leerzeichen sollte explizit angegeben werden und nicht in einer Formatspezifikation ,,versteckt`` werden. Also:
100 FORMAT (1X, I4, 2F5.2)
und nicht
100 FORMAT (I5, 2F5.2)