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