| ACCESS | bestimmt die Zugriffsart der Datei |
| mögliche Werte: SEQUENTIAL und DIRECT | |
| ACTION | gibt die zulässigen Operationen an: |
| READ, WRITE oder READWRITE | |
| BLANK | legt die Interpretation von Leerzeichen fest |
| NULL oder ZERO (Default: NULL) | |
| DELIM | legt die Begrenzung von Zeichenketten fest |
| APOSTROPHE, QUOTE oder NONE (Default: NONE) | |
| ERR | mit Angabe einer Marke zu der im Falle eines Fehlers verzweigt werden soll |
| FILE | Angabe des Namens der Datei, die zu öffnen ist |
| FORM | Angabe der Form der zu öffnenden Datei: |
| FORMATTED oder UNFORMATTED | |
| IOSTAT | wie bei READ-Anweisung |
| PAD | sollen (bei zu kurzen Datensätzen) Füllzeichen übertragen werden? |
| YES oder NO (Default: YES) | |
| POSITION | Angabe der Dateiposition: REWIND, APPEND oder ASIS |
| (Default: ASIS, wie es ist) | |
| RECL | gibt im Falle von direct-access-Files die Record-Länge an |
| STATUS | Angabe des Status einer zu öffnenden Datei: |
| OLD, NEW, SCRATCH, REPLACE oder UNKNOWN (Default: UNKNOWN) | |
| SCRATCH bedeutet, daß die Datei beim Schließen gelöscht wird | |
| (sonst auch mit CLOSE-Anweisung und STATUS-Parameter DELETE möglich) | |
| UNIT | Angabe der File-Nummer, UNIT = kann entfallen, wenn die Zahl an erster |
| Stelle der Parameterliste steht |
Die meisten dieser Parameter kann man mit der INQUIRE-Anweisung abfragen, außerdem gibt es die Möglichkeit, die File-Existenz vor dem Öffnen mit INQUIRE (unit, FILE=file, EXIST=exist) abzufragen. Die logische Variable exist wird auf wahr gesetzt, wenn der File file existiert.
Beispiel: die Eingabe von der Tastatur wird - Zeile für Zeile - in ein direct-access-File gespeichert
PROGRAM hide
IMPLICIT NONE
CHARACTER * 80 :: file, zeile, loeschen*1
INTEGER :: rec
LOGICAL :: exist
WRITE (*,'(A)') &
'speichert die Eingabe - Zeile fuer Zeile - auf ein direct-access-File'
WRITE (*,'(A)',ADVANCE='NO') 'geben Sie File ein: '
READ (*,'(A)') file
INQUIRE (FILE=file, EXIST=exist)
IF (exist) THEN
WRITE (*,'(A)',ADVANCE='NO') 'File existiert schon - loeschen [n]/j - '
READ (*,'(A1)') loeschen
IF (loeschen /= 'j') STOP
ENDIF
OPEN (10, FILE=file, STATUS='UNKNOWN', ACCESS='DIRECT', FORM='UNFORMATTED', &
RECL = 80, ERR=100)
rec = 1
DO
READ (*,'(A)',END=200) zeile
WRITE (10, REC=rec) zeile
rec = rec+1
ENDDO
100 WRITE (*,'(A)') 'Fehler in OPEN'
STOP
200 CLOSE (10)
STOP
END
Und mit folgendem Programm könnte man diesen Text wieder lesen:
PROGRAM files
IMPLICIT NONE
CHARACTER * 80 :: file1, file2, zeile
INTEGER :: rec, iostat, num = 6 ! Bildschirm!
LOGICAL :: exist
WRITE (*,'(A)') &
'konvertiert direct-access, unformatted, recl=80 => sequential, formatted'
WRITE (*,'(A)',ADVANCE='NO') 'geben Sie File ein: '
READ (*,'(A)') file1
INQUIRE (FILE=file1, EXIST=exist)
IF (.NOT. exist) STOP 'File existiert nicht!'
OPEN (10, FILE=file1, STATUS='OLD', ACCESS='DIRECT', FORM='UNFORMATTED', &
RECL = 80, IOSTAT=iostat)
IF (iostat /= 0) STOP 'Fehler beim OPEN'
WRITE (*,'(A)',ADVANCE='NO') 'geben Sie File ein: '
READ (*,'(A)') file2
IF (file2 /= ") THEN
num = 20
INQUIRE (FILE=file2, EXIST=exist)
IF (exist) STOP 'File existiert!'
OPEN (20, FILE=file2, STATUS='NEW', ACCESS='SEQUENTIAL', FORM='FORMATTED', &
IOSTAT=iostat)
IF (iostat /= 0) STOP 'Fehler beim OPEN'
ENDIF
rec = 1
DO
READ (10, REC=rec, IOSTAT=iostat) zeile
IF (IOSTAT /= 0) EXIT
WRITE (num, '(A)') zeile
rec = rec+1
ENDDO
CLOSE (10); CLOSE (num)
STOP
END