Reading integer from file end with ``Missing forma

2019-09-19 07:39发布

问题:

I'm updating a Fortran program for my needs. The program compiles using f95 and gcc version 4.1.2 (I know it is old, but I can't update it). I want to read parameters from a file and I try this via

      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

The input file looks like

           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

When I try to run this I get an error

Fortran runtime error: Missing format for FORMATTED data transfer
done

Which points to the first read line. The startConf variable, as well asi`` is an integer. The rest of the variables are double precision.

I've used this method to read data into integers previously (even in the same code) without problem, where is my current fault?

回答1:

As you do not specify it explicitely, your open statement assumes a formatted (text) file. When reading from a text file, you have to provide a format as well:

read(18, *) i1

Alternatively, if your file is unformatted (binary), open your file accordingly:

 open (unit=18, file='resLast', status='old', action='read', form='unformatted')


回答2:

read(18,*)is a better choice. you can try this.