You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fortran 77 READ语句语法错误排查:DIRECT访问记录参数问题

处理Fortran 77 READ语句的语法错误问题

问题场景

编译80-90年代的老式Fortran 77代码时,遇到READ语句的语法错误。代码中文件采用直接访问模式,但READ语句的写法无法通过Intel编译器编译。

错误代码片段

文件打开与第一条READ语句

OPEN (UNIT=11,FILE=DRDFIL,ACCESS='DIRECT',
     *      STATUS='OLD',FORM='FORMATTED',RECORD SIZE=360)
      NFRD=1
      READ (11''NFRD,FMT=90019,ERR=11) AO,DHI,B,NR,NC,FS,FAR,ASP,APP,AOP,
     *  AIP,KF,LT,NT,L,H,LS,LEB,TUBETYPE,AIRSIDE,LD

跳转后的第二条READ语句

11    NFRD=2
      READ (11''NFRD,FMT=90029) A1,B1,C1,D1,A2,B2,C2,D2,E2,A3,B3,
     *  (DRYCF(I),I=1,3),(WETCF(I),I=1,3)

编译器报错信息

error #5082: Syntax error, found IDENTIFIER 'NFRD' when expecting one of: :: ) , : * <END-OF-STATEMENT> ; . (/ + - ] /) ' ** > PRIVATE / // ...
      READ (11 NFRD,ERR=11) AO,DHI,B,NR,NC,FS,FAR,ASP,APP,AOP,
---------------^

输入文件格式

打开的是空格分隔的长数字串文本文件,示例内容:

0.12066861E+03  0.29457249E-01  0.69446688E+01  0.10000000E+01  0.40000000E+02  0.27042252E+03  0.79557860E+00  0.32429367E+02  0.37945886E+01  0.36223957E+02  0.52160816E+01

解决方案

问题出在READ语句中错误的写法11''NFRD,这是老式代码的书写疏漏。由于文件采用直接访问模式(ACCESS='DIRECT'),必须明确指定要读取的记录号,正确写法需添加REC参数:

修正后的第一条READ语句

READ (11, REC=NFRD, FMT=90019, ERR=11) AO,DHI,B,NR,NC,FS,FAR,ASP,APP,AOP,
     *  AIP,KF,LT,NT,L,H,LS,LEB,TUBETYPE,AIRSIDE,LD

修正后的第二条READ语句

11    NFRD=2
      READ (11, REC=NFRD, FMT=90029) A1,B1,C1,D1,A2,B2,C2,D2,E2,A3,B3,
     *  (DRYCF(I),I=1,3),(WETCF(I),I=1,3)

代码意图解释

  • NFRD=1和NFRD=2是指定直接访问文件中的第1条记录和第2条记录。直接访问模式下,文件被划分为固定长度的记录(RECORD SIZE=360指定了单条记录长度),通过REC参数指定读取的记录序号。
  • 原代码中的11''NFRD是打字疏漏,正确逻辑是用逗号分隔单元号和记录号参数,即11, REC=NFRD(也可省略REC关键字写为11, NFRD,但显式指定关键字可读性更强)。

内容的提问来源于stack exchange,提问作者Glen Herman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 12:47:15