2

我正在根据需要更新 Fortran 程序。该程序使用版本 4.1.2 编译f95gcc我知道它很旧,但我无法更新它)。我想从文件中读取参数,我尝试通过

      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

输入文件看起来像

           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

当我尝试运行它时,我得到一个错误

Fortran runtime error: Missing format for FORMATTED data transfer
done

指向第一read行。i``startConf variable, as well as是一个整数。其余变量是双精度的。

我以前使用这种方法将数据读入整数(即使在相同的代码中)也没有问题,我当前的错误在哪里?

4

2 回答 2

6

由于您没有明确指定它,因此您的open语句假定为formatted(文本)文件。从文本文件读取时,您还必须提供格式:

read(18, *) i1

或者,如果您的文件是unformatted(二进制),请相应地打开您的文件:

 open (unit=18, file='resLast', status='old', action='read', form='unformatted')
于 2013-06-03T11:28:11.397 回答
0

read(18,*) 是更好的选择。你可以试试这个。

于 2013-06-04T11:52:47.417 回答