Ein- und Ausgabe

Transcription

Ein- und Ausgabe
L7 Fortran95-Formate
Ein- und Ausgabe
Listengesteuert (irgendwie, aber lesbar)
PRINT*,zahl
WRITE(*,*) zahl
WRITE(UNIT=*,FMT=*) zahl
WRITE(UNIT=6,*) zahl
! Sonderrolle: 6 voreingestellt output
WRITE(0,*) zahl
! 0=Terminal ?
WRITE(UNIT=TEXT,FMT=*) zahl ! CHARACTER(LEN=80) :: TEXT
! nur eine Zeile erlaubt
Lesen
READ*,zahl
READ(*,*) zahl
READ(UNIT=5,FMT=*) zahl ! 5 voreingestellt input
formatiert (=lesbar)
PRINT 100,zahl; 100 FORMAT(F10.3)
PRINT ’(F10.3)’,zahl
WRITE(6,100) zahl
WRITE(UNIT=*,FMT=’(F10.3)’) Zahl
text="(F10.3)"; WRITE(UNIT=6,FMT=text) zahl
iout=68
! integer 1..99 oder
OPEN(UNIT=iout,FILE=’daten.dat’)
WRITE(UNIT=iout,text)
REWIND UNIT=iout
CLOSE(UNIT=iout)
1..999, je nach Hersteller
! Position Anfang
! Position eine Zeile weiter
! wieder am Anfang
! Datei zu, iout wieder verwendbar
unformatiert (=Speicherabzug, kann man nicht auflisten!)
OPEN(UNIT=7,FILE=’binaerdaten’,FORM=’UNFORMATTED’)
WRITE(7) viele_daten ! nicht lesbar
WRITE(UNIT=ibuffer) viele_daten ! nicht lesbar
1
L7 Fortran95-Formate
Wichtiges zu Formaten
• Fw.d
Floating (=REAL), Breite w, d Stellen hinter
Dezimalpunkt. Zur Breite zählt alles: Vorzeichen, der
Punkt
• Iw - Integer, Breite w. Beisp: -437 (w ≥ 4)
• Aw, A - Text (CHARACTER).
• Ew.d, ESw.d
Floating Exponentialdarstellung. Breit! -0.52E-15. Es gibt
auch Ew.dEe, Dw.d. Sehr zu emphehlen ist ESw.d: 5.2E-15
(Scientific)
• Gw.d - General. Liest fast alles.
• kX, "...", ’...’
k Blanks: 3X macht dasselbe wie "
mit "text" oder ’text’.
" im Format. Text
• Tn macht an der absoluten Position n weiter, n > 0 (von
links gemessen). Mehrfach lesen möglich!
• TRn verschiebt die Position n > 0 weiter nach Rechts.
Mehrfach lesen möglich!
• TLn verschiebt die Position um n > 0 weiter nach Links.
Mehrfach lesen möglich!
• / - neue Zeile
• Wiederholung: FMT="(3F5.0,(I6,/,2ES12.2))"
wenn 3F5.0 abgearbeitet, wird die Klammer wiederholt
(∞)!
2
L7 Fortran95-Formate
Praxis Tipps
OPEN(....STATUS=’OLD’..) ! Datei muss existieren, nur zum Lesen
OPEN(....STATUS=’NEW’..) ! Datei darf noch nicht existieren
READ(UNIT=10,...) ...
REWIND UNIT=10
WRITE(UNIT=10,FMT=..) ! Zurueckspulen vor Ueberschreiben
READ(UNIT=input,IOSTAT=ios) ...
IF(ios == 0 ) PRINT*,"KEIN FEHLER"
IF(ios < 0) PRINT*,"END OF FILE"
INQUIRE( .... ) ! Abfrage aller moeglicher Dinge
In Fortran bedeuted jedes WRITE oder READ eine neue Zeile,
ausser mit Schlüsselwort ADVANCE=’NO’
CHARACTER(LEN=10) :: answer
WRITE(UNIT=*,FMT="(A)",ADVANCE="NO") "Enter yes or no: "
READ(UNIT=*,FMT="(A)") answer
IF(TRIM(answer)=="yes") EXIT
Dieses Kapitel können wir nicht erschöpfend behandeln!
3
L7 Fortran95-Formate
Hausaufgabe
• Schreiben Sie das File sounding1.dat mit dem Inhalt:
1234567890123456789012345678901234567890123456789012345678901
N levels =
5
SST=
24.89 C
Pressure
Temp.
Spec. humid.
(mb)
(C)
(g/kg)
---------------------1000.0
23.451
14.70
900.0
18.274
9.89
800.0
13.315
7.02
500.0
-8.317
1.83
250.0
-44.549
0.16
1234567890123456789012345678901234567890123456789012345678901
• Lesen Sie aus dem File die Variablen:
N, SST, p(1:N), T(1:N), q(1:N)
und berechnen Sie die potentiellen Temperaturen:
1000
θ = (T + 273.15)
p
72
• Schreiben Sie das File sounding2.dat mit einer
zusätzlichen Spalte für die potentielle Temperatur
...
Pressure
(mb)
------1000.0
...
Temp.
(C)
----23.451
Spec. humid
(g/kg)
-----------14.70
pot. Temp
(K)
----------XXX.XX
4