我正在尝试将文件读入我的代码中。 有2个子程序,一个写入文件,另一个读取文件。 写作部分是:
write(*,*)'entered refile, shall make file'
ileunitA=int(presentstep)
write(fname,1012)ileunitA
1012 format('DATA_',i6.6,'.dat')
write(fnam,1112)index
1112 format('pp',i3.3)
open(UNIT=ileunitA,FILE=fname)
!variables from module global
write(ileunita,*)u,v,w,pc,p,p0,rho1,gam,con
write(ileunita,*)aip,aim,ajp,ajm,akp,akm,ap,ap0
write(ileunita,*) scon,smomu,smomv,smomw
...
阅读部分如下(在另一个子程序中):
ileunita=25;
open(unit=ILEUNITA,file='DATA_010500.dat')
!variables from module global
read(ileunita,*)u,v,w,pc,p,p0,rho1,gam,con
read(ileunita,*)aip,aim,ajp,ajm,akp,akm,ap,ap0
read(ileunita,*) scon,smomu,smomv,smomw
...
当我运行代码时,它显示以下错误:
文件bub2.f90的第3682行(单位= 25,文件='DATA_000001.dat')
Fortran运行时错误:列表输入的第1项中的重复计数错误
任何人都可以帮我弄清楚可能是什么问题吗?什么是'重复计数'。什么是'坏'重复计数?谢谢
答案 0 :(得分:0)
猜一点(您可以在问题中显示有问题的行中的文本...),但是您使用列表导向输入(和输出),其中*
作为读取中的第二个说明符(和写)声明。列表定向输入允许使用语法r*c
表示具有相同值的多个字段,其中r
是数字重复计数,c
是要重复的值。
如果您的任何输出项生成包含*
的字段,那么可能会混淆输入处理。
(允许(尽管很少)处理器使用重复计数表示具有相同值的多个输出字段,例如WRITE (unit,*) 23, 23, 23, 23
可能导致包含文本{{1}的输入文件}。)
列表定向输入还具有一些其他功能,例如分隔符字符的处理,导致输入处理终止的4*23
字符以及空值的可能性和处理。其中一些功能可能会让那些不熟悉规则的人感到惊讶(这些规则受到通过穿孔卡提交输入时采用的典型捷径的启发),这就是为什么避免列表定向输入和输出以及使用显式格式通常更好的原因。
如果您的任何数据字段属于字符类型,则应考虑使用非默认DELIM模式,以避免字符变量值中的任何特殊字符混淆输入处理。