我正在根据我的需求更新Fortran程序.该程序编译使用f95和gcc4.1.2版(我知道这是老了,但我不能更新).我想从文件中读取参数,我尝试通过
inquire (file="resLast", exist=resExist)
if (readStart.eq.1.and.resExist) then
open (unit=18,file='resLast', status='old', action='read')
read (18) startConf
read (18) avlength, stdlength, avenergy
read (18) i,h2(1)
read (18) i,h2(2)
read (18) i,h2(4)
read (18) i,h2(5)
read (18) i,h2(8)
read (18) i,h2(9)
read (18) i,h2(13)
read (18) i,h2(16)
read (18) i,h2(17)
read (18) i,h2(18)
read (18) i,h2(20)
read (18) i,h2(25)
read (18) i,h2(32)
close (18)
else
startConf = 0
do i=1,32
h2(i)=0
comh2(i)=0
enddo
avlength=0d0
stdlength=0d0
avenergy=0d0
endif
Run Code Online (Sandbox Code Playgroud)
输入文件看起来像
0
196.090732114834 38451.5752213317 53.4452884569457
1 9.188750409521163E-004
2 4.548226133920252E-004
4 8.704101492185146E-005
5 2.175445697503164E-004
8 4.992044341634028E-005
9 2.108949411194772E-005
13 4.304789035813883E-005
16 4.693072696682066E-005
17 8.976260141935199E-005
18 2.737747854553163E-005
20 5.637826689053327E-005
25 3.860405195155181E-005
32 3.193027441739105E-005
Run Code Online (Sandbox Code Playgroud)
当我尝试运行时,我收到一个错误
Fortran runtime error: Missing format for FORMATTED data transfer
done
Run Code Online (Sandbox Code Playgroud)
哪个指向第一read行.所述startConf variable, as well asi``是一个整数.其余变量是双精度.
我以前使用这种方法将数据读入整数(即使在相同的代码中)没有问题,我当前的错误在哪里?
由于您没有明确指定它,因此您的open语句假定formatted(文本)文件.从文本文件中读取时,您还必须提供一种格式:
read(18, *) i1
Run Code Online (Sandbox Code Playgroud)
或者,如果您的文件是unformatted(二进制),请相应地打开您的文件:
open (unit=18, file='resLast', status='old', action='read', form='unformatted')
Run Code Online (Sandbox Code Playgroud)