Dies ist eine alte Version des Dokuments!


Formatstrings

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).

Angabe von Formatstrings

Formatstrings können bei WRITE/READ-Anweisungen folgendermaßen angegeben werden:

  • garnicht; Standardformat entsprechend dem Typ der Variablen (durch *)
  • Marke; an der Marke steht dann die entsprechende Formatliste via FORMAT(<fliste>)
  • '(fliste)' - direkte Angabe der Formatanweisung als String an READ oder WRITE

Eine Formatliste enthält durch Komma getrennte Formatelemente:

  • ein Datenformatelement pro Variable (z.B. I, F, E … )
  • dazwischen beliebig viele Steuerelemente, die keinen direkten Bezug zu Variablen aufweisen (z.B. X, T, $,…)

Ein Datenformatelement kann folgendermaßen angegeben werden:

nFw.d
  • n → Wiederholungsfaktor des Datenelements
  • w → Gesamtzeichenzahl
  • d → Zusatzangabe; bei F (Real) Anzahl der Nachkommastellen

Eine Gruppierung von Elementen ist möglich via Klammerung:

FORMAT(5(I2,':', F6.2))

Formatelemente

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.

Beispiele

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):

matrix.F90
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