【问题标题】:Syntax error in Fortran OPEN(25,"file.txt",iostat=stat)Fortran OPEN(25,"file.txt",iostat=stat) 中的语法错误
【发布时间】:2019-07-21 05:42:16
【问题描述】:

在 Fortran (Code:Blocks IDE) 中执行以下代码时出现编译时错误。

PROGRAM file
IMPLICIT NONE
INTEGER stat
OPEN(25,"file.dat",iostat=stat)
IF(stat==0) THEN
  print *, "File read complete"
ELSE
   PRINT *, "Err.."
END IF
END PROGRAM file

输出:

/home/file.f90|7|Error: Syntax error in OPEN statement

【问题讨论】:

  • 请显示确切的错误消息和更多代码 (minimal reproducible example)。您的 IDE 无关紧要,请告诉我们您的编译器名称和版本以及错误消息。向我们展示您使用的编译器命令或 IDE 中的编译器设置。
  • @HighPerformanceMark 添加了脚本及其错误输出。
  • 您添加的程序与您最初的片段不同。 character ... 行不再相关了吗?
  • 奇怪的是我们没有重复(至少我还没有找到)。我之前被这个咬过好几次了。

标签: file-io fortran syntax-error


【解决方案1】:

声明:

OPEN(25,"file.dat",iostat=stat) 不正确,应改为: OPEN(25,FILE="file.dat",iostat=stat)

来自标准:

Syntax of the OPEN statement

R1204 open-stmt is OPEN ( connect-spec-list )

R1205 connect-spec is [ UNIT = ] file-unit-number
  or ACCESS = scalar-default-char-expr
  or ACTION = scalar-default-char-expr
  or ASYNCHRONOUS = scalar-default-char-expr
  or BLANK = scalar-default-char-expr
  or DECIMAL = scalar-default-char-expr
  or DELIM = scalar-default-char-expr
  or ENCODING = scalar-default-char-expr
  or ERR = label
  or FILE = file-name-expr
  or FORM = scalar-default-char-expr
  or IOMSG = iomsg-variable
  or IOSTAT = stat-variable
  or NEWUNIT = scalar-int-variable
  or PAD = scalar-default-char-expr
  or POSITION = scalar-default-char-expr
  or RECL = scalar-int-expr
  or ROUND = scalar-default-char-expr
  or SIGN = scalar-default-char-expr
  or STATUS = scalar-default-char-expr

【讨论】:

  • 但脚本正在我的服务器中执行。以下是生成文件数据 PGM = all ## intel CMP = ifort #CMP = ifort -static #所有库都静态链接 REAL64 = -real-size 64 BASIC = -save -g -FR -fpe0 -traceback SPEED = -O
  • 看来我需要安装 ifort 编译器
  • @AKR 不明白。这个错误可以通过设置FILE="file.dat"来解决,我假设你已经安装了Fortran编译器,否则你无法得到错误信息。
  • @AKR,我刚刚用 ifort (19) 测试了你的程序。英特尔编译器确实接受了许多非标准的东西,但它(在这个版本中)拒绝这个程序并显示有用的错误消息。
  • @francescalus ,我在哪里可以获得 ifort 编译器,可以免费下载吗?
【解决方案2】:

open 语句中,控制是通过说明符。在问题的陈述中,我们看到尝试提供三个:要连接的单元、文件名和 iostatus。

对于除单位以外的所有说明符,必须以SPECIFIER=... 的形式提供它们。如果单位是列表中的第一个,unit= 是可选的。

所以,在这种情况下,我们必须有

OPEN(20,file="file.txt",iostat=stat)  ! Optionally, (unit=20, ...)

虽然 open 语句的控制列表看起来像由关键字指定的过程参数,但它们是非常不同的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2018-02-26
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多