3

我的任务是将一些旧的(大约 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 文档,但是我无法找到与这个模式有关的任何信息。我理解 write 和 read 语句后面的隐含 do 循环,但我不明白这是写入和读取的“位置”。浏览 FORTRAN 代码的其余部分并没有显示可能与此调用关联的 unit=2 open 语句,因此它似乎不是磁盘文件,但我不确定。我希望这里有人可以恢复他们的记忆并帮助我。

4

1 回答 1

3

如果我正确阅读了VMS VAX FORTRAN 手册'N,请在 unit 中指定N-th 记录2。来自 Cl。7.1.1.6 “记录说明符”:

记录说明符标识了您希望在具有相关组织的文件中访问的记录的编号。它采用以下任一形式:

REC = r
'r

r
是一个数值表达式,其值表示要访问的记录在直接访问文件中的位置。[...]

请注意,这不是符合标准的 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 声明 [...]
  • 系统隐式 [...]

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

VAX FORTRAN 以下列形式提供预定义的逻辑名称:

FOR0nn[.DAT]

[...]

例如:

   WRITE (17,200)

如果您输入上述语句而不包括显式文件规范,则数据将写入默认磁盘上默认目录下名为 FOR017.DAT 的文件。

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

于 2016-05-23T18:14:59.717 回答