回 帖 发 新 帖 刷新版面

主题:大侠们帮我看看数据为什么读不出来啊


          met_input = 'GLDAS_SWdown.200003h.direct'        

          open(10,file=met_input,
     :                form = 'unformatted', access = 'direct',    
     :                recl = nx*ny, status='old')
          do ir=1,ny
        do ic=1,nx   
            read(10, rec = 1) meteoro(ic,ir)
          print *,'meteoro(i,j)' , meteoro(ic,ir)
        enddo 
        enddo

回复列表 (共8个回复)

沙发

因为你始终读的是 rec = 1 的第一个记录,所以始终得到的都是一样的结果。

把 

do ir=1,ny
        do ic=1,nx   
            read(10, rec = 1) meteoro(ic,ir)
          print *,'meteoro(i,j)' , meteoro(ic,ir)
        enddo 
        enddo

改成这样就行

            read(10, rec = 1) meteoro
do ir=1,ny
        do ic=1,nx   

          print *,'meteoro(i,j)' , meteoro(ic,ir)
        enddo 
        enddo

板凳

我向direct格式文件里面写数据的时候是按照下面格式写的:
    OPEN (10, file=outputfiles, status='unknown') 
    OPEN (6, file=outputfile, 
     :            form = 'unformatted', access = 'direct',
     :         recl = nnc*nnr, status='unknown')
    do dd=1,ndays(mcircle)*24
    write(6,rec = dd) ((mapedata(ic,ir,dd),ic=1,nnc),ir=1,nnr)
    write(10,'(165f10.4)') ((mapedata(ic,ir,dd),ic=1,nnc),ir=1,nnr)
    end do
    close(10)
    close(6) 
因为direct格式数据不能看到,所以我就把同样的数据写成ascii存到10文件里面,我从10文件里面看的数据都是正确的,不全是0,但是我用上面的代码把direct格式文件读出来的时候,怎么全是0呢,我尝试了你告诉我的方法,但是print出来的全部还是0啊,大侠帮帮我。

3 楼

你的数据到底有多大?是几维数组?

写的时候,mapedata(ic,ir,dd)

读的时候, read(10, rec = 1) meteoro(ic,ir)

维数都不一样,我很糊涂。

4 楼

我的数据是1月存一个direct文件,里面包含这个月的天数乘以24个文件,每个文件有290行,165列,我最上面那个程序,只是想试试能不能读出3月第一个文件里面的290行,165列的数据。

5 楼

大侠你帮我看看我往direct文件写数据时写的对不对,谢谢你。

6 楼

你表达能力有问题

第一

我的数据是1月存一个direct文件,里面包含这个月的天数乘以24个文件

文件里不能再包含文件,至少windows不能。

第二

二进制文件没有行和列的概念。

建议你先看看我的帖子,写给新手的:
[url]http://bbs.pfan.cn/post-256197.html[/url]

看完之后,确定以下问题:
每个文件里有多少数据?
(我不需要知道你有多少个文件)
你的数组是二维还是三维?
分别多大?
每个记录多长?
一个文件分几个记录?
每个记录多大?

7 楼

我看过你的帖子了,我说的一个月存一个direct文件,每个文件里面包含这个月的天数乘以24条记录,每个记录的长度是165*290

8 楼

OPEN (16, file=outputfile, 
     :            form = 'unformatted', access = 'direct',
     :         recl = nnc*nnr, status='unknown')
    do dd = 1 , ndays(mcircle)*24
      read(16,rec = dd ) mapedata(:,:,dd)
    end do
    close(16)

这样应该就可以

我来回复

您尚未登录,请登录后再回复。点此登录或注册