vms fortran read/write 单位名称

vms fortran read/write unit designation

我的任务是将一些旧的(大约 1986 年的)VAX VMS FORTRAN 代码移植到 c++,并且 运行 有点儿绊脚石。以下两行代码是计算 goto 的一部分。

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

我的问题是单位指示符“2'N”,如果确实如此的话。 "N" 是传递给子程序的整型变量。我已经为这个模式做了相当多的谷歌搜索,并阅读了我能找到的 VMS 文档,但一直无法找到关于这个带有撇号的模式的任何信息。我理解写入和读取语句之后隐含的 do 循环,但我不理解 'where' 这是写入和读取。浏览 FORTRAN 代码的其余部分并没有显示可能与此调用关联的 unit=2 open 语句,因此它似乎不是磁盘文件,但我不确定。我希望这里有人可以回到他们的记忆中并帮助我。

如果我没看错 VMS VAX FORTRAN manual'N 指定单元 2 中的第 N 条记录。 来自Cl。 7.1.1.6 "Record Specifier":

The record specifier identifies the number of the record you wish to access in a file with relative organization. It takes either one of the following forms:

REC = r
'r

r
Is a numeric expression with a value that represents the position in a direct access file of the record to be accessed. [...]

请注意这不是符合标准的 Fortran!大多数编译器不会接受这种语法。相反,使用 REC=...:

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

2 单元的文件不需要显式打开。这在同一文件 Cl 中有规定。 7.1.1.2 "Logical Unit Specifier":

A logical unit number is assigned to a file or device in one of the two ways:

  • Explicitly trough an OPEN statement [...]
  • Implicitly by the system [...]

在后一种情况下,使用的文件名在Cl. 4.2.2.1 "FORTRAN Logical Names" of the VAX Fortran user manual中定义:

VAX FORTRAN provides predefined logical names in the following form:

FOR0nn[.DAT]

[...]

For example:

   WRITE (17,200)

If you enter the preceding statement without including an explicit file specification, the data is written to a file named FOR017.DAT on your default disk under your default directory.

在这种情况下,大多数现代编译器都会创建一个文件 fort.nn