【问题标题】:vms fortran read/write unit designationvms fortran 读/写单元指定
【发布时间】:2016-09-20 16:46:30
【问题描述】:

我的任务是将一些旧的(大约 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 语句,因此它似乎不是磁盘文件,但我不确定。我希望这里的人可以恢复他们的记忆并帮助我。

【问题讨论】:

    标签: fortran fortran77 vms vax


    【解决方案1】:

    如果我正确读取了VMS VAX FORTRAN manual'N 在单元2 中指定了N-th 记录。 来自 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

    【讨论】:

    • 谢谢你!现在更有意义了。也感谢手册的链接。代码中有一个地方确实打开了一个文件作为 unit4,“ELIBn.DAT”,并且文件目录位置的文件编号为 1 到 9。我可以从这里找出其余的。
    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多