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 ENDUnd 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