Fortran: Fortran 2003: Ein- und Ausgabe
Aus Wikibooks
| <<< zur Fortran-Startseite | |
| << Fortran 2003 | Bibliotheken >> |
| < Zeiger | Intrinsische Funktionen und Subroutinen > |
Inhaltsverzeichnis |
[Bearbeiten] Streams
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.
[Bearbeiten] Unterschied zum alten I/O-Konzept?
- 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.
[Bearbeiten] Anwendung
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( ... ) |
[Bearbeiten] Unformatierte Stream-I/O
Beispiel:
| Fortran 2003-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 | ![]() |
[Bearbeiten] Formatierte Stream-I/O
Beispiel:
| Fortran 2003-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 |
[Bearbeiten] Asynchrone I/O
[Bearbeiten] Rekursive I/O
[Bearbeiten] Sonstiges
[Bearbeiten] Weblinks
| <<< zur Fortran-Startseite | |
| << Fortran 2003 | Bibliotheken >> |
| < Zeiger | Intrinsische Funktionen und Subroutinen > |

