Fortran:(1) 处的 WRITE 语句存在语法错误

问题描述 投票:0回答:1

我正在尝试将一些(实数)数组写入文件。

open(unit=100, file = 'file.dat', status = 'replace')                   
    do j = 1, nss
        write(unit=100, *) m(j)!, xs(j), ys(j), zs(j)
    end do
    close(unit=100)

但是,这给了我:

Error: Syntax error in WRITE statement at (1)

我做错了什么?也许它与之前的一些读写语句相关?因为这对我来说看起来是合法的。

感谢@lastchance。它可以用

write(unit=100, *)
 替换 
write(100, *)

file-io fortran
1个回答
0
投票

WRITE 语句(以及 READ 语句的一种形式)采用 控制信息列表 来说明数据传输如何进行,并使用 数据传输输出列表(READ 的输入)来说明哪些数据实体转入。控制信息列表是第一位,括号内。

控制信息列表是说明符1的列表,例如

unit=100
fmt='(A)'
iostat=status
。对于除单位、格式和名单说明符之外的所有说明符,
spec=...
部分是必需的。

对于单位说明符,如果单位是列表的第一项,则

UNIT=
是可选的。对于格式和名单说明符,如果说明符是列表中的第二项,则
FMT=
NML=
字符是可选的(只能给出这些说明符之一) 并且 指定的单位没有
UNIT=
( Fortran 2018 C1217、C1218):

如果 format 出现时前面没有 FMT=,则它应为 io-control-spec-list 中的第二项,第一项应为 io-unit

如果 namelist-group-name 出现时前面没有 NML=,则它应为 io-control-spec-list 中的第二项,第一项应为 io-unit

因此,如上所述,正确的形式是:

write(unit=100, fmt=*) ...
write(fmt=*, unit=100) ...
write(100, *) ...
write(100, fmt=*) ...

1 尽管表面上看,说明符和过程的参数之间几乎没有联系。像

unit=2
这样的说明符不是关键字参数,像
*
这样的说明符不是位置参数。

© www.soinside.com 2019 - 2024. All rights reserved.