Formatstrings dienen dazu die Ausgabe / Eingabe zu formatieren. So kann bspw. bei Eingaben angegeben werden, welche Datentypen erwartet werden, oder bei Ausgaben, welche Datentypen wie ausgegeben werden (bspw. hexadezimal, etc).
Formatstrings können bei WRITE/READ-Anweisungen folgendermaßen angegeben werden:
Eine Formatliste enthält durch Komma getrennte Formatelemente:
Ein Datenformatelement kann folgendermaßen angegeben werden:
nFw.d
Eine Gruppierung von Elementen ist möglich via Klammerung:
FORMAT(5(I2,':', F6.2))
| Format | Bedeutung | Beispiel | Wert | Ausgabe |
|---|---|---|---|---|
| Iw[.m] | Ausgabe von Integerzahlen, rechtsbündig, mindestens m Ziffern | I5 | -23 | -23 |
| Fw.d | Ausgabe von real mit Festkomma; d Kommastellen | F5.1 | 12.123 | 12.1 |
| Ew.d[Ee] | Ausgabe von real mit Gleitkomma; d Matisseziffern, e Exponentenziffern | E9.2 | -1.0 | -00.10E+01 |
| ENw.d[Ee] | siehe E; Angabe des Exponenten erfolgt in 3er-Schritten (einfache Umrechnung in metrische Einheiten möglich); passt die Zahl nicht in w Zeichen werden w Sterne ausgegeben. | EN9.2 | 23 | 23E+00 |
| ESw.d[Ee] | siehe E; Ausgabe des Exponenten erfolgt in 1er Schritten, dabei steht vor dem Komma der Mantisse nie eine 0 | ES9.2 | 23 | 2.3E+01 |
| Dw.d | siehe E | |||
| Lw | Ausgabe von Logical-Werten, rechtsbündig | L3 | (2>1) | T |
| A[w] | Ausgabe von Character mit w Zeichen, rechtsbündig | A3 | 'Texte' | 'Tex' |
| Gw.d[Ee] | generisches Format, gibt die Werte angepasst an den Typ und Wert der Variablen aus | G9.2 | 0.002 | 0.20E-01 |
| Zw[.m] | hexadezimal Ausgabe von integer, real, logical mit mindestens m Hexadezimalstellen | Z9.8 | 20 | 00000014 |
| Ow[.m] | siehe Z; Ausgabe als Oktalzahlen | |||
| Bw[.m] | siehe W; Ausgabe als Binärzahlen | |||
| Steuerelemente | ||||
| '…' | die Zeichenkette ausgeben | 'Hallo' | Hallo | |
| nH… | Hollerith-Konstante (Zeichenkette) ausgeben; die Zeichenkette hat dabei n Zeichen | 5HHallo | Hallo | |
| Tn | In der Zeile zur Position n springen (absolute Angabe) | |||
| TRn | In der Zeile um n Zeichen nach rechts springen (relativ) | |||
| TLN | In der Zeile um n Zeichen nach links springen (relativ) | |||
| nX | n Leerzeichen ausgeben | |||
| / | Neuer Datensatz / Neue Zeile, Möglich ist neben …,/,… auch …/… | |||
| nP | Skalierungsfaktor 10^n für alle nachfolgenden E und F-Formate | |||
| SP | Erzwingt die Ausgabe des Vorzeichens auch bei positiven Zahlen | |||
| SS | Gibt die Vorzeichen bei positiven Zahlen nicht (mehr) mit aus | |||
| BN | Leerzeichen bei der Eingabe ignorieren | |||
| BZ | Leerzeichen bei der Eingabe als 0 interpretieren | |||
| : | vorzeitiges Ende der Ausgabe, falls die ioliste abgearbeitet ist. | |||
| $ | steht am Ende der Formatliste; erzwingt, dass der Cursor nach der Ausgabe stehenbleibt; dh. kein Newline am Ende der Ausgabe | |||
Jedem Datenelement aus der ioliste wird ein Datenformat aus der Formatliste zugeordnet, zwischen den Datenformatelementen stehende Steuerzeichen werden noch verarbeitet, selbst wenn die ioliste erschöpft ist (das Steuerzeichen „:“ verhindert das). Beim Ende der Formatliste wird ein Newline-Zeichen ausgegeben, dann geht es bei der letzten Formatgruppe (Klammerung) der Formatliste weiter.
Eine Eingabe soll direkt hinter der Frage nach der Eingabe erfolgen:
integer a WRITE (*,'(A,$)') "Bitte geben Sie eine Integerzahl ein: " READ (*,*) a
Ausgabe einer Matrix A zeilenweise, dabei werden acht Werte auf eine Zeile geschrieben (wir ignorieren hier, dass Matrizen in Fortran spaltenweise gespeichert werden):
program main INTEGER,PARAMETER :: N = 100 REAL,DIMENSION(N,N) :: A INTEGER :: i, k ! Initialisieren von A do i=1, N do k=1, N A(i,k) = i*1000+k; enddo enddo ! Ausgabe von A do i=1, N write (*, '(6HZeile , I3 / (1X, 8E10.2))') i, (A(i,j),j=1,N) enddo end program