使用“已完成格式化数据传输的缺少格式"从文件末尾读取整数 [英] Reading integer from file end with ``Missing format for FORMATTED data transfer done``

查看:19
本文介绍了使用“已完成格式化数据传输的缺少格式"从文件末尾读取整数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

输入文件看起来像

           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

指向第一行read.startConf 变量以及i`` 是一个整数.其余的变量是双精度的.

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?

推荐答案

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

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')

这篇关于使用“已完成格式化数据传输的缺少格式"从文件末尾读取整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆