爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6200|回复: 15

[求助] 求助,fortran读数据出问题

[复制链接]

新浪微博达人勋

发表于 2013-9-3 10:34:05 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 寄居蟹 于 2013-9-3 15:24 编辑

program main


     PARAMETER (K_MAX=1, NT=37,IN=21,nV=2) !nv means the number of variables
! define 2D array:
       real,dimension(in,nt,nv) :: va
             character variable(2)*10
          data variable/'h','t'/
irec=1
do m=1,nv
! now read data
open(m,file=''//trim(variable(m))//'_0813.dat',form='binary',&
    recl=nt*in*4)
    read(m,rec=irec)((va(i,j,m),i=1,in),j=1,nt)
    irec=irec+1
        close(m)
end do
stop
end
出现问题如下:
我把两个文件分开一起读的时候, program main
     PARAMETER (K_MAX=1, NT=37,IN=21)
! define 2D array:
  real,dimension(in,nt) :: t,h
irec=1
! now read data
       open(21,file='T_0813.dat',form='unformatted',&
              recl=nt*in*4)
         read(21,rec=irec)((t(i,j),i=1,in),j=1,nt)
         irec=irec+1
        close(21)

       open(20,file='h_0813.dat',form='unformatted',&
              recl=nt*in*4)
         read(20,rec=irec)((h(i,j),i=1,in),j=1,nt)
         irec=irec+1
        close(20)
stop
end

也是读第二个文件就出现相同的错误。看到一个文章上说fortran错误代码36是一下解释
severe (36): Attempt to access non-existent record
FOR$IOS_ATTACCNON. A direct-access READ or FIND statement
attempted to access beyond the end of a relative file (or a sequential file
on disk with fixed-length records) or access a record that was previously
deleted from a relative file.
求各位指导下错误原因!谢谢!



360截图20130903102954135.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-9-3 10:37:39 | 显示全部楼层
提示是没有找到第二个文件,你看看文件名是不是不对应
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-9-3 11:12:30 | 显示全部楼层
建议楼主不要使用10以内的数字当文件号吧,你可以用其他一个定值,反正你的循环结束前你都有关闭该文件。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-9-3 14:59:50 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-9-3 15:00:56 | 显示全部楼层
维欻? 发表于 2013-9-3 10:37
提示是没有找到第二个文件,你看看文件名是不是不对应

文件绝对存在,吧这两个文件顺序调换也还是读不了第二个文件
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-9-3 15:02:29 | 显示全部楼层
冬日情愫+ 发表于 2013-9-3 11:12
建议楼主不要使用10以内的数字当文件号吧,你可以用其他一个定值,反正你的循环结束前你都有关闭该文件。

也不是这个原因呐
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-9-3 15:14:26 | 显示全部楼层
你的每个文件是多大啊?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-9-3 15:20:10 | 显示全部楼层
lqouc 发表于 2013-9-3 15:14
你的每个文件是多大啊?

每个文件基本是4KB
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-9-3 15:27:46 | 显示全部楼层
寄居蟹 发表于 2013-9-3 15:20
每个文件基本是4KB

晕,我是说你的文件是不是每个都只有in*nt那么大,如果不是的话你第二个文件开始record定位在第二个记录,但是你并没有第二个记录,所以你最开始的报错就会说你在尝试读取一个不存在的记录。
你读文件的目的是什么?把每个文件内的第一个记录都读出来么?不是很明白你为什么把文件和设备号还有记录数在一个循环里面转,这样很容易出错啊。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2013-9-3 15:49:52 | 显示全部楼层
不好意思,之前没仔细看,你这个是因为你的irec在读取下一个文件的时候没有初始化为1,比如第一个文件从开头的地方读取了37*21*4个字节,你第二个文件如果不初始化irec=1的话,由于上面irec=irec+1,所以第二个文件是从37*21*4之后的字节开始读取的,当然超出了文件范围。
造成这个错误的原因可能是你只是看到了别人代码里面用到了irec=irec+1,却不知道这是干啥用的。。。(楼上的解释也是这个意思)

评分

参与人数 1金钱 +6 体力 +66 收起 理由
lqouc + 6 + 66 给个吉利的数字

查看全部评分

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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