2016-04-06 17 views
2

Ich habe wird eine Lese-/Schreiboperation in dem Fortran-Code-Snippet auf alsÖffnen einer Datei auf Einheit 5 oder 6

OPEN(5,FILE='WKDAT.dat', STATUS='OLD') 
OPEN(6,FILE='WKLST.dat', STATUS='UNKNOWN') 

folgt Ich weiß, dass die Einheitsnummer 5 standardmäßig für die Eingabe von der Tastatur verwendet wird, und die Einheit Nummer 6 wird zur Anzeige auf dem Bildschirm verwendet. Auch ich kann * verwenden.

Aber in der oben genannten Fortran-Code-Einheit ist Nummer 5 und ein Dateiname "WKDAT.dat" wird angegeben. Das bedeutet also, dass die Daten aus der Datei "WKDAT.dat" gelesen werden. Außerdem gibt es Code-Einheit Nummer 6 und ein Dateiname "WKLST.dat" wird angegeben. Das bedeutet also, dass die Daten in die Datei "WKLST.dat" geschrieben werden. Ist mein Verständnis korrekt?

Nach meinem grundlegenden Wissen: Einheit Nummer 5 wird nur verwendet, um Eingaben von der Tastatur & Einheit Nummer 6 wird nur für den Ausdruck auf der Konsole verwendet, so dass keine Dateien beteiligt sein sollten. Aber im Code-Snippet hat es sowohl die Nummer 5, 6 als auch den Dateinamen.

So sind beide im Widerspruch :(

In diesem Link http://www.oc.nps.edu/~bird/oc3030_online/fortran/io/io.html sie erwähnt haben folgendes: „Wenn I/O in eine Datei ist, müssen Sie eine UNIT Nummer ASSOZIIEREN (die Sie wählen) mit dem Dateinamen. Verwenden Sie jede Einheit andere Nummern als 5 und 6. Auf einigen Computern sind einige Gerätenummern für die Verwendung durch das Betriebssystem des Computers reserviert. "

+1

"Die Einheit Nummer 5 wird nur verwendet, um Eingaben von der Tastatur zu empfangen." ... Diese Annahme ist falsch. 5 und 6 für Stdin und Stdout ist eine historische Praxis in Fortran, und die meisten Anfänger Buch betonen diese Praxis. Aber .... Es ist nur Übung, keine Notwendigkeit. – BaRud

Antwort

2

Fortran hat keine magischen Einheitsnummern. Der Fortran-Standard sagt nichts über 5, 6 oder andere gültige Einheiten aus Wenn Sie diese Nummer für einen bestimmten Zweck verwenden, steht es Ihnen frei, die open-Anweisung zu verwenden, um eine gültige Einheitsnummer mit einer Datei zu verknüpfen, aber traditionell aus Gründen, die vor mir lagen, wurden 5 und 6 p wieder mit der Tastatur und dem Bildschirm verbunden, wie Sie sagen. Jetzt können Sie noch die Assoziation mit der open-Anweisung ändern, und das ist in Ordnung, abgesehen von der Verwirrung, die es verursachen kann. Daher empfehlen die meisten Menschen, die ich kenne, dies zu vermeiden und Unit-Nummern von 10 und höher zu verwenden. Auch weil 5 und 6 nicht mit den Standard-Eingabe- und Ausgabegeräten verknüpft sind, würde ich ihre Verwendung empfehlen, indem * oder, in modernerem Code, die genannten Konstanten input_unit, output_unit und error_unit aus dem iso_fortran_env intrinsischen Modul bevorzugt werden.

Also zusammenfassend haben Sie die richtige Idee, und ich bin nicht überrascht, dass Sie verwirrt sind.

2

Nichts in dem Standard sagt Einheiten 5 und 6 eine besondere Bedeutung haben, obwohl in der Praxis der Standardeingabe und die Standardausgabe sind oft vorgeschaltetes-5 und 6.

Modul iso_fortran_env von Fortran 2008 enthält Konstanten

INPUT_UNIT 
OUTPUT_UNIT 
ERROR_UNIT 

mit den Einheitennummern, an denen Standardeingang, Standardausgang und Standardfehler angeschlossen sind. Diese dürfen sich von 5 und 6 unterscheiden.

Beim Öffnen einer Datei in der verwendeten Einheit wird die Einheit der neuen Datei zugeordnet.

Zum Beispiel die Cray Fortran manual sagt:

Einheitsnummern 100, 101 und 102 sind fest mit dem Standardeingabe, Standardausgabe und Standardfehler-Dateien zugeordnet, sind.

Das heißt, wenn Sie eine andere Datei als Einheit 5 oder 6 Standardeingabe und die Standardausgabe geöffnet haben noch eine andere Einheit, in der sie vorge verbunden sind, und sie werden nicht geschlossen werden.