2016-05-23 6 views
3

Ich wurde damit beauftragt, einige alte (ca. 1986) VAX VMS FORTRAN-Codes nach C++ zu portieren und bin in ein kleines Stolperstein geraten. Die folgenden zwei Codezeilen sind Teil eines berechneten Goto.vms fortran Lese-/Schreibeinheitsbezeichnung

WRITE(2'N) (Y (I), I = 1, 5) 
READ(2'N, ERR = 48) (Y (I), I = 1, 5) 

Mein Problem ist der Einheitsbezeichner "2'N", wenn das tatsächlich so ist. "N" ist eine Integer-Variable, die an das Unterprogramm übergeben wird. Ich habe ziemlich viel nach diesem Muster gegoogelt und gelesen, welche VMS-Dokumentation ich finden konnte, konnte aber keine Informationen bezüglich dieses Musters mit dem Apostroph finden. Ich verstehe die implizite do-Schleife, die den Schreib- und Leseanweisungen folgt, aber ich verstehe nicht, wo und wohin ich schreibe. Wenn Sie den Rest des Fortran-Codes durchsuchen, wird keine offene Anweisung von unit = 2 angezeigt, die mit diesem Aufruf verknüpft werden könnte. Daher ist es wahrscheinlich keine Platten-Datei, aber ich bin mir nicht sicher. Ich hoffe, dass jemand hier zurück in ihre Erinnerung kommen und mir helfen kann.

Antwort

3

Wenn ich die VMS VAX FORTRAN manual richtig gelesen habe, gibt 'N den N -ten Eintrag in der Einheit 2 an. Von Cl. 7.1.1.6 "Datensatzbezeichner":

Der Datensatzbezeichner gibt die Nummer des Datensatzes an, auf den Sie in einer Datei mit relativer Organisation zugreifen möchten. Es dauert eine der folgenden Formen annehmen:

REC = r 
'r 

r
ist ein numerischer Ausdruck mit einem Wert, der die Position in einer Direktzugriffsdatei des Datensatzes zugegriffen werden soll, darstellt. [...]

Bitte beachten Sie, dass dies nicht Standard-konformen ist Fortran! Die meisten Compiler akzeptieren diese Syntax nicht. Verwenden Sie stattdessen REC=...:

WRITE(2, REC=N) (Y (I), I = 1, 5) 
READ(2, REC=N, ERR = 48) (Y (I), I = 1, 5) 

Die Datei an Einheit 2 nicht offen explizit sein muss. Dies ist im selben Dokument, Cl angegeben. 7.1.1.2 "Logical Unit Anforderung":

Eine logische Einheitsnummer in einer Datei oder einer Vorrichtung in einer der zwei Arten zugeordnet:

  • Explizit Trog eine OPEN-Anweisung [...]
  • Implizit durch das System [...]

im letzteren Fall ist die verwendete Dateiname in Cl. 4.2.2.1 "FORTRAN Logical Names" of the VAX Fortran user manual definiert:

VAX FORTRAN stellt vordefinierte logische Namen in der folgende Form:

FOR0nn[.DAT] 

[...]

Zum Beispiel:

WRITE (17,200) 

Wenn Sie die vorhergehende Anweisung ohne einschließlich eines explizite Dateiangabe, werden die Daten in eine Datei geschrieben namens FOR017.DAT auf Ihrem Standard-Festplatte unter Ihrem Standard Verzeichnis eingeben .

Die meisten modernen Compiler erstellen in diesem Fall eine Datei fort.nn.

+0

Vielen Dank dafür! Es macht jetzt viel mehr Sinn. Danke auch für die Links zum Handbuch. Es gibt eine Stelle im Code, die eine Datei explizit als unit4, "ELIBn.DAT", öffnet, und der Speicherort des Dateiverzeichnisses enthält diese Dateien von 1 bis 9. Ich kann den Rest von hier aus herausfinden. –