爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 18703|回复: 25

[求助] fortran读取二进制文件出错,求助!!!

[复制链接]

新浪微博达人勋

发表于 2017-7-27 13:01:25 | 显示全部楼层 |阅读模式

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

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

x
小白一枚 下载了nc日平均高度场数据hgt.998.nc
  编写fwrite.gs 文件提取数据写成199806.grd文件,程序如下:
*******************************************************
'reinit'
'sdfopen e:\nc\hgt.1998.nc'
'set gxout fwrite'
'set fwrite e:\nc\199806.grd'
'set x 1 144'
'set y 1 73'
'set lev 500'
tt=152
while(tt<=212)
'set t 'tt''
*1998年6月1日-7月31日
'd hgt'
'print'
'c'
tt=tt+1
endwhile
'disable fwrite'
'reinit'

**********************************
为检验提取的grd文件是否正确,用sdfopen语句直接打开nc文件画图以及编写ctl描述文件用grd文件画图,对比如下:
通过对比可知,grd文件出图与nc文件直接出图是一致的,证明grd文件的数据提取是正确的。
grd.PNG          nc.PNG

*******************************************************************************************
由于要对数据进行处理,现在用fortran编程处理grd文件并且输出成十进制的txt文件以方便后续操作
本质问题就是fortran读取二进制数据的问题
可是发现输出的数据存在明显的错误
因为读取的是高度场,所以数据应该是5880.5840等
但是输出的数据缺不是,而是很奇怪的值。

我个人判断应该是f90程序的问题,但是实在查不出错误在哪里
求大神指教。
*********************************************************
f90程序如下:
implicit none
integer x,y,t
integer,parameter::nx=144,ny=73,nt=61
integer,dimension(3)::hgt(nx,ny,nt)
!integer,dimension(3)::hgt(nx,ny)
integer irec
!     ------------------------------------------------------------------------
!     data nt 1998.06.01-1998.07.31             
!--------------------------------------------------------------------------
     open(10,file='e:\nc\199806.grd',form='binary',recl=nx*ny*nt)  
         do t=1,nt
           do y=1,ny
             do x=1,nx
                read(10) hgt(x,y,t)
         enddo
         enddo
         enddo
    close(10)
       
    open(20,file='e:\nc\199806.txt')  
         do t=1,nt
           do y=1,ny
             do x=1,nx
    write(20,*) hgt(x,y,t)
         enddo
         enddo
         enddo
         close(20)
         end

************************************
输出的txt截图如下:

QQ截图20170727131018.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-31 14:13:00 | 显示全部楼层
很厉害,谢谢楼主
密码修改失败请联系微信:mofangbao
回复 支持 0 反对 1

使用道具 举报

新浪微博达人勋

发表于 2017-7-27 15:29:45 | 显示全部楼层
去掉  ,recl=nx*ny*nt   试试看
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-27 16:07:25 | 显示全部楼层
赞同楼上观点,去掉那一句试一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-27 16:44:05 | 显示全部楼层
数据读取存放的顺序没问题么?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-27 18:27:53 | 显示全部楼层
小肥虾619 发表于 2017-7-27 16:44
数据读取存放的顺序没问题么?

我之前有这个疑问是不是grd提取出了问题,但是通过作图对比发现两张图是一样的,所以grd应该没问题。所以只有可能是f90的程序读取数据出了问题
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-27 18:46:25 | 显示全部楼层
river 发表于 2017-7-27 15:29
去掉  ,recl=nx*ny*nt   试试看

改成了
open(10,file='e:\nc\199806.grd',form='binary)  
出来的结过还是一样的。

我在想一个问题,是不是我的f90程序读数据顺序(即时间、纬度、经度)应该与提取数据的fwrite.gs文件里面的顺序一致。因为我不太懂fwrite提取grd文件时数据是怎么存放的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-27 18:47:10 | 显示全部楼层
aridlhy 发表于 2017-7-27 16:07
赞同楼上观点,去掉那一句试一下

改成了
open(10,file='e:\nc\199806.grd',form='binary)  
出来的结过还是一样的。

我在想一个问题,是不是我的f90程序读数据顺序(即时间、纬度、经度)应该与提取数据的fwrite.gs文件里面的顺序一致。因为我不太懂fwrite提取grd文件时数据是怎么存放的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-27 20:23:09 | 显示全部楼层
好吧,其实我一直觉着,如果能装netCDF库(基本没见过真的真的不能装的情况),绝对比鼓捣普通二进制文件有效率……


然后,对 ctl  grd  gs  都不懂

确定是提取存成  integer  吧?
然后ls们说的 recl  的用法看着确实有问题,它应该对应单次读写数据量,比如你要单次只读一个integer,那就只是 1  或者  4(根据编译器据说不太一样,都试一试)
如果你单次处理整个数组,那可以各种 n 乘
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-27 20:28:58 | 显示全部楼层
weinihou 发表于 2017-7-27 20:23
好吧,其实我一直觉着,如果能装netCDF库(基本没见过真的真的不能装的情况),绝对比鼓捣普通二进制文件有 ...

我直接把recl那一句删掉了,出来的数据还是一样。
我就是要把二进制的数据提取出来,写成十进制的整数数组。
我理解recl这一句是单次处理整个数组,所以写成了recl=nx*ny*nt
看到大家的建议后
recl这一句,我分别删掉、写成recl=1,recl=4,recl=nx*ny,出来的结果都还是一样。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-27 21:37:07 | 显示全部楼层
本帖最后由 river 于 2017-7-28 11:57 编辑
繁星一点 发表于 2017-7-27 18:46
改成了
open(10,file='e:\nc\199806.grd',form='binary)  
出来的结过还是一样的。

顺序没错啊,既然是用grads自带的函数写出来的文件那就一定是符合grads要求的格式的。你下载兰溪的grads2ascii 脚本试试,这个可以直接用grads把NC资料输出成十进制的
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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