VMS FORTRAN读写单元指定

3

我被委派将一些老旧的(约1986年)VAX VMS FORTRAN代码移植到C++,但遇到了一些困难。以下两行代码是计算跳转的一部分。

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

我的问题是单位设计ator "2'N",如果确实是这样的话。 "N" 是传递给子程序的整数变量。我已经为这个模式做了相当多的谷歌搜索,并阅读了我能找到的 VMS 文档,但未能找到任何关于这个带撇号的模式的信息。我理解在写和读语句后面跟随的隐含 do 循环,但我不明白这是在哪里写入和读取的。浏览 FORTRAN 代码的其余部分没有揭示出与此调用相关联的 unit=2 打开语句,因此似乎很可能它不是一个磁盘文件,但我不确定。我希望这里有人能回忆起来并帮助我。
1个回答

3
如果我正确阅读了VMS VAX FORTRAN手册'N指定了单位2中第N条记录。来自Cl. 7.1.1.6“记录说明符”:

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“逻辑单元标识符”中有说明:

文件或设备被分配一个逻辑单元号的方式有两种:

  • 通过OPEN语句显式指定[...]
  • 由系统隐式指定[...]

在后一种情况下,使用的文件名在VAX Fortran用户手册的Cl. 4.2.2.1“FORTRAN逻辑名称”中定义:

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 的文件。

谢谢你!现在我理解得更清楚了。还要感谢你提供的手册链接。代码中有一个地方明确地打开了一个名为"ELIBn.DAT"的文件作为unit4,而该文件目录位置中的这些文件编号从1到9。从这里开始,我可以自己解决剩下的问题了。 - Thomas Gamble

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接