Fortran: Fortran 2003: Ein- und Ausgabe
Erscheinungsbild
<<< zur Fortran-Startseite | |
<< Fortran 2003 | Bibliotheken >> |
< Zeiger | Intrinsische Funktionen und Subroutinen > |
Streams
[Bearbeiten]Fortran 2003 bietet zusätzlich zum altbekannten datensatzbasierten I/O nun auch Dateieingabe und -ausgabe in Form von Streams, wie das z.B. in der Programmiersprache C seit jeher üblich ist.
Unterschied zum alten I/O-Konzept?
[Bearbeiten]- Streams ermöglichen das Lesen und Schreiben von Binärdateien, ohne sich mit den auf Datensätzen aufbauenden Strukturen der konventionellen Fortran-I/O herumschlagen zu müssen.
- Bei der Ein-/Ausgabe mit Streams wird die Datei als kontinuierliche Byte-Sequenz betrachtet.
- Stream-I/O ist logischerweise nicht für interne Dateien gedacht.
Anwendung
[Bearbeiten]Auch wenn Stream-I/O in Fortran 2003 ein neues Konzept ist, so sind die altbekannten open
-, read
-, write
-und close
-Befehle dafür zuständig.
- Öffnen eines Streams:
open( ..., access = "STREAM", ... ) |
- Lesen und Schreiben:
read( ... ) ... write( ... ) ... |
- Schließen eines Streams:
close( ... ) |
Unformatierte Stream-I/O
[Bearbeiten]Beispiel:
Fortran 2003 (oder neuer)-Code |
program bsp implicit none real :: a = 55.678 real :: b character( len = 3 ) :: str open( 50, file = "test", access = "STREAM", status = "REPLACE") write( 50 ) "Hallo Welt" write( 50 ) "Hello World" ! Ausgabe in Datei: siehe Bild 1 write( 50, pos = 100 ) "Greetings" ! Ausgabe in Datei: siehe Bild 2 write( 50, pos = 60 ) a ! Ausgabe in Datei: siehe Bild 3 read( 50, pos = 60 ) b write( *, * ) b ! Ausgabe: ! 55.678 read( 50, pos = 8 ) str write( *, * ) str ! Ausgabe: ! elt close( 50 ) end program bsp |
Da es sich um eine unformatierte Ein-/Ausgabe handelt, darf natürlich kein Formatspezifizierer bei den read
- und write
-Anweisungen angegeben werden, auch kein *
. Mittels pos
-Spezifizierer kann an eine bestimmte Position in der Datei gesprungen werden.
Bild 1 | |
---|---|
Bild 2 | |
Bild 3 |
Formatierte Stream-I/O
[Bearbeiten]Beispiel:
Fortran 2003 (oder neuer)-Code |
program bsp implicit none real :: a = 55.678 real :: b = 13.9876 character( len = 20 ) :: str1, str2, str3 integer :: fposition open( 50, file = "test", access = "STREAM", form = "FORMATTED", status = "REPLACE") write( 50, "(2A20)" ) "Hallo Welt", "Hello World" inquire( 50, pos = fposition ) write( *, * ) fposition write( 50, * ) a, new_line( "x" ), b, " abcdef" read( 50, *, pos = fposition ) a write( *, * ) a read( 50, *, pos = 1 ) str1, str2, str3 write( *, * ) str1, str2, str3 read( 50, * ) str1, a write( *, * ) str1, a ! Ausgabe in Datei: ! Hallo Welt Hello World ! 55.678 ! 13.9876 abcdef ! Ausgabe auf Bildschirm: ! 42 ! 55.678 ! Hallo Welt Hello ! 55.678 13.9876 close( 50 ) end program bsp |
Asynchrone I/O
[Bearbeiten]Rekursive I/O
[Bearbeiten]Sonstiges
[Bearbeiten]Weblinks
[Bearbeiten]
<<< zur Fortran-Startseite | |
<< Fortran 2003 | Bibliotheken >> |
< Zeiger | Intrinsische Funktionen und Subroutinen > |