我正在尝试将一些(实数)数组写入文件。
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, *)
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
这样的说明符不是关键字参数,像 *
这样的说明符不是位置参数。