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)