Umgang mit Dateien

Der Umgang mit Dateien ist in vielen Programmen unerlässlich, sei es um Ausgabedaten festzuhalten oder Eingabedaten komfortabel einzulesen oder um Konfigurationdaten zu speichern.

Dateien müssen in Fortran grundsätzlich zunächst geöffnet werden, dann kann je nachdem was beim Öffnen angegeben wurde, gelesen und / oder geschrieben werden, und wenn die Datei nicht mehr benötigt wird, sollte die Datei wieder geschlossen werden. Beim Öffnen wird eine Unit-Nr mit der Datei verknüpft. Dh. wir geben eine Zahl an, unter der wir auf die Datei zugreifen wollen. Units sind eine Art Identifikator für Dateien, bspw. hat stdout (die Standardausgabe) die Nummer 7.

Öffnen

Wir öffnen eine Datei mit der Open-Anweisung:

  open ([UNIT=]<unitnr>, ...)

Open nimmt eine Vielzahl von Argumenten, hier seien nur einige aufgelistet:

  • [UNIT=]x - Angabe der Unitnummer (Ganzzahl), die mit der zu öffnenden Datei verknüpft werden soll
  • file=x - Angabe des Dateinamens
  • iostat=x - Die Variable x ist 0 falls Open fehlerfrei ausgeführt wurde, ansonsten eine andere Nummer
  • status=x - Angabe (als String), welchem Constraint die Datei unterliegen muss:
    • 'old' - Datei existiert bereits und wird nicht erzeugt
    • 'new' - Datei wird erzeugt
    • 'scratch' - es wird eine namenlose temporäre Datei erzeugt, die nach Schließen der Datei wieder gelöscht wird
    • 'unknown' - Das System bestimmt den Dateistatus selbst
    • 'replace' - Eine bereits vorhandene Datei wird ersetzt (damit beim Öffnen gelöscht)
  • access=x - Angabe der Zugriffsmethode:
    • 'sequentiail' - sequentieller Zugriff
    • 'direct' - direkter Zugriff
    • 'stream' - binärer Zugriff
  • position=x - Angabe, wo der Dateizeiger beim Öffnen der Datei stehen soll
    • 'asis'
    • 'rewind' - ans Anfang setzen
    • 'append' - ans Ende setzen
  • action=x - Angabe was mit der Datei geschehen soll, nur der Zugriff ist dann später auch erlaubt:
    • 'read' - nur Lesezugriff
    • 'write' - nur Schreibzugriff
    • 'readwrite' - Lesen und Schreiben
  • err=x - Angabe einer Sprungmarke x, an die gesprungen werden soll, wenn ein Fehler auftritt

Im Standardfall sind folgende Vorgaben gemacht:

  • status = 'unknown'
  • position = 'asis'
  • access = 'sequential'
  • form = 'formatted'

Lesen und Schreiben

Der Lese- und Schreibzugriff auf Dateien erfolgt mittels der gewohnten write und read-Befehle unter Angabe der Unit-Nummer, die beim open belegt wurde. Ist die Unitnummer, die angegeben wird, nicht belegt, erzeugt Fortran eine Datei nach dem Schema:

<Anwendungsname>.f.<Unitnr>

Dateien schließen

Eine Datei kann mittels close geschlossen werden:

close (...)

Parameter:

  • [unit=]x - Unitnummer, die geschlossen werden soll
  • iostat=x - x ist nach der Rückkehr 0 falls fehlerfrei durchgelaufen, ansonsten eine andere Zahl
  • err=x - Angabe einer Marke, an die gesprungen wird, wenn ein Fehler auftritt
  • status=x
    • 'keep' - Datei soll erhalten bleiben (Standard)
    • 'delete' - Datei soll gelöscht werden