爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6754|回复: 11

[求助] fortran读取二进制文件报错(附代码和运行窗口)

[复制链接]

新浪微博达人勋

发表于 2014-3-11 10:46:48 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
如题,小白再次来求助了。
运行fortran提示如下错误
help.PNG

前面的exist和opened 是检查文件是否有问题的结果,程序附在后面

ps:后面的read命令是我从之前的程序的write命令复制粘贴以后改的,书写应该没有问题,就是不知道为什么读不出来
pps:试过吧 unformatted改成binary,可以运行下去,但再写出来以后数值就变得很奇怪了

求大神帮忙啊!

program main
implicit none
integer,parameter::mxdy=9497
real::hgt00(10,1,15,mxdy)
real::t00(10,1,15,mxdy)
real::dn00(10,1,15,mxdy)
real::td00(10,1,15,mxdy)
real::wd00(10,1,15,mxdy)
real::ws00(10,1,15,mxdy)
integer::irec,x,t,z
logical alive

inquire(file='sounding_00_05smr.dat',exist=alive)
if(alive) then
write(*,*) 'exist'
else
write(*,*) "doesn't exist"
end if
read(*,*)


!!!读入探空
open(15,file='sounding_00_05smr.dat',form='unformatted',access='direct',recl=10)

inquire(file='sounding_00_05smr.dat',opened=alive)
if(alive) then
write(*,*) 'opened'
else
write(*,*) "doesn't open"
end if
read(*,*)

irec=0
do t=1,mxdy
  do z=1,15
  irec=irec+1
  read(15,rec=irec) (hgt00(x,1,z,t),x=1,10)
  end do

  do z=1,15
  irec=irec+1
  read(15,rec=irec) (t00(x,1,z,t),x=1,10)
  end do

  do z=1,15
  irec=irec+1
  read(15,rec=irec) (dn00(x,1,z,t),x=1,10)
  end do

  do z=1,15
  irec=irec+1
  read(15,rec=irec) (wd00(x,1,z,t),x=1,10)
  end do

  do z=1,15
  irec=irec+1
  read(15,rec=irec) (ws00(x,1,z,t),x=1,10)
  end do
end do

end

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-3-11 11:02:22 | 显示全部楼层
不知道你的数据是否有头文件?头文件是字符型的,如果没有跳过的话是容易出错的···
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-11 11:05:12 | 显示全部楼层

谢谢回复,数据没有头文件,就是纯的浮点数数组转换为二进制格式,不知超版还看到别的问题了木,小白已经觉得这是灵异事件了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-11 12:31:09 | 显示全部楼层
uid127 发表于 2014-3-11 11:05
谢谢回复,数据没有头文件,就是纯的浮点数数组转换为二进制格式,不知超版还看到别的问题了木,小白已经 ...

可以先用pause或者什么的把出错的具体位置定位一下。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-11 12:58:12 | 显示全部楼层
lqouc 发表于 2014-3-11 12:31
可以先用pause或者什么的把出错的具体位置定位一下。

谢谢回复,我查了一下,出错的位置在第一个read语句那里,可是自己没觉得那里不妥。
而且想要读入的数据可以写出ctl在grads里画图。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-3-11 15:29:26 | 显示全部楼层
uid127 发表于 2014-3-11 11:05
谢谢回复,数据没有头文件,就是纯的浮点数数组转换为二进制格式,不知超版还看到别的问题了木,小白已经 ...

不知道你的数据哪里来的,写的时候格式如何,否则并非所有的无格式数据都是这样read方法的,从这上面很难看出来。或许你可以尝试顺序读取试试看
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-11 16:53:00 | 显示全部楼层
言深深 发表于 2014-3-11 15:29
不知道你的数据哪里来的,写的时候格式如何,否则并非所有的无格式数据都是这样read方法的,从这上面很难 ...

我write出来没问题,就是read不对,我再试试吧。多谢~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-12 16:54:27 | 显示全部楼层
uid127 发表于 2014-3-11 16:53
我write出来没问题,就是read不对,我再试试吧。多谢~

我也觉得是read5个变量的顺序可能错了,可以把5个read放在同一个do z循环里试试,或者把do t循环也拆成5个套在5个do z外面试试~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-12 18:04:17 | 显示全部楼层
你的open可能有问题,form='BINARY',声明数据是2进制的。
这是我的读2进制文件的程序,共参考
Open(12,File = "f:\cyclone\20020319\image\pmsl032106.dat",form='BINARY', access="SEQUENTIAL",status="old",action='read')
       pmin=1000.0
       do i=1,261
           do j=1,141
             read(12) pm(i,j)
             n=n+1
            print *, pm(i,j),n
           end do
        end do
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-12 18:09:54 | 显示全部楼层
read(15,rec=irec) 中的rec=irec是什么意思?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表