我的任务是将一些旧的(大约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"是传递给子例程的整数变量。我已经为这种模式做了很多googleing并阅读了我能找到的VMS文档,但是无法使用撇号查找有关此模式的任何信息。我理解写和读语句之后隐含的do循环,但我不明白' where'这是写作和阅读。浏览FORTRAN代码的其余部分并不会显示可能与此调用相关联的unit = 2 open语句,因此它似乎不是磁盘文件,但我不确定。我希望有人能回到他们的记忆中帮助我。
答案 0 :(得分:3)
如果我正确阅读VMS VAX FORTRAN manual,则'N
指定单位N
中的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. 4.2.2.1 "FORTRAN Logical Names" of the VAX Fortran user manual:
中定义VAX FORTRAN提供预定义的逻辑名称 以下表格:
FOR0nn[.DAT]
[...]
例如:
WRITE (17,200)
如果输入前面的语句而不包括 显式文件规范,将数据写入名为的文件 默认情况下默认磁盘上的FOR017.DAT 。目录
在这种情况下,大多数现代编译器都会创建一个文件fort.nn
。