vms fortran读/写单元标识

时间:2016-05-23 17:34:02

标签: fortran fortran77 vms vax

我的任务是将一些旧的(大约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语句,因此它似乎不是磁盘文件,但我不确定。我希望有人能回到他们的记忆中帮助我。

1 个答案:

答案 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