爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8025|回复: 13

[求助] unformatted 和 binary

[复制链接]

新浪微博达人勋

发表于 2013-4-24 00:19:29 | 显示全部楼层 |阅读模式

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

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

x
我有一个月平均温度的数据。我不知道应该用unformatted 还是 binary 来读,准确来说我不知道这两者在windows 7下的准确区别。
于是我用一个程序分别用unformatted 和 binary读了一遍并输出了前10个数。其中-9999.0是undef的数,程序如下:

open(unit=44,file='E:\lhczhc\study materials\senior\Graduation Thesis\datas\China_Tm_1961_2009_month_05x05.dat',&
status='old', form='unformatted',access='direct',recl=1) !original

i=1
   do ix=1,10
     read (44,rec=i,iostat=error) tm(ix,1,1,1)
  write (*,*) tm(ix,1,1,1)
     i=i+1
   end do
close (44)
write (*,"(/)")

open(unit=440,file='E:\lhczhc\study materials\senior\Graduation Thesis\datas\China_Tm_1961_2009_month_05x05.dat',&
status='old', form='binary',access='direct',recl=1) !original

i=1
   do ix=1,10
     read (440,rec=i,iostat=error) tm(ix,1,1,1)
  write (*,*) tm(ix,1,1,1)
     i=i+1
   end do
close (440)

得到的输出如下:
file:///C:/Users/Administrator/AppData/Roaming/Tencent/Users/527506650/QQ/WinTemp/RichOle/)3LY%251S~(TT)YG4)6YP3)@M.jpg

两者在附件里,也有。简单形容就是,前者读出的前十个数基本都是-9999.00。而binary读出的第一个是-9999.00。然后就是一些1.8E-39,7.8E- 03.6.2E-22 之类的数。


求问,这样是不是可以证明我的数据应该用unformatted 来读?另外,到底什么情况下应该用unformatted,什么情况下应该用binary来读写,两者到底有什么区别?

输出的数据

输出的数据

123456.f90

1.24 KB, 下载次数: 0, 下载积分: 金钱 -5

原程序

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

新浪微博达人勋

发表于 2013-4-24 11:30:09 | 显示全部楼层
binary读取的时候不用rec和recl吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-24 19:58:55 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-24 20:15:52 | 显示全部楼层
这么说的话随你好了,自己有空好好看看为什么要写rec吧,文本的还照样可以写。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-24 20:59:01 | 显示全部楼层
lqouc 发表于 2013-4-24 20:15
这么说的话随你好了,自己有空好好看看为什么要写rec吧,文本的还照样可以写。

我检查了一下,如果把open里面的recl=1改为recl=4,将会得到unformatted和binary一致的结论,但是如果将recl和rec删除,将会在运行exe时得到如下提示:

删除rec和recl时的提示:

删除rec和recl时的提示:
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-24 21:14:05 | 显示全部楼层
本帖最后由 lqouc 于 2013-4-24 21:15 编辑
Bubble_liu 发表于 2013-4-24 20:59
我检查了一下,如果把open里面的recl=1改为recl=4,将会得到unformatted和binary一致的结论,但是如果将r ...

乘不乘以4那是编译器的问题,一般fortran不需要乘以4,G77则需要(引自彭国伦的fortran教程)
至于binary,我用的时候就没加rec和recl,运行很好。
open(13,file='f:\data\new\last\visnew.grd',status='replace',form='binary')
do i=1,395
o=0.0
p=1
q=1
do j=1,m
write(stat,'(i8)')data3(1,j,i)
write(13)stat,data3(2,j,i),data3(3,j,i),o,p,q,data3(4,j,i),data3(5,j,i),data3(6,j,i),data3(7,j,i),data3(8,j,i)
end do
p=0
write(13)stat,data3(2,j,i),data3(3,j,i),o,p,q
end do
close(13)
这一段改编自清风的grads站点绘图,可以看看和你写的有什么不一样。
至于你的报错,说数据的记录长度不确定。我个人感觉是数据的问题,可能是数据里面的数有的带小数点有的不带。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-24 21:29:48 | 显示全部楼层
lqouc 发表于 2013-4-24 21:14
乘不乘以4那是编译器的问题,一般fortran不需要乘以4,G77则需要(引自彭国伦的fortran教程)
至于binar ...

嗯啦,谢谢您的悉心指导呢。
我在编译过程中,出现非常明显的unformatted 对应recl=1,binary对应recl=4的现象,现在还无从得知是个人 电脑?编译器?的问题呢,还是普遍现象呢。
您提供的程序主要用于write,我纠结于read,不知道这个是不是会是两者出现不同反应的原因。数据我脑残地输出了一个97M的txt看了一下,基本就是一些-9999.0和20.123456之类的温度数据。
其实我最好奇的是unformatted和binary的区别,及其分别应用环境
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-24 21:40:17 | 显示全部楼层
Bubble_liu 发表于 2013-4-24 21:29
嗯啦,谢谢您的悉心指导呢。
我在编译过程中,出现非常明显的unformatted 对应recl=1,binary对 ...

谈不上指导,互相学习吧,你不说其实我也不会想区别。虽然目前还是不知道区别。
但是明确的是binary是可以不用rec的,所以对我来说就不存在4
的问题。而且在fortran90的语言中文件的form已经没有binary这个选项了。
话说程序自然是怎么写就怎么读,再给你贴一段好了
open(13,file='f:\vis\Veof-east.grd',status='old',form='binary')
do i=1,10
read(13)(data4(j,i),j=1,mm)
end do
close(13)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-24 21:47:20 | 显示全部楼层
lqouc 发表于 2013-4-24 21:40
谈不上指导,互相学习吧,你不说其实我也不会想区别。虽然目前还是不知道区别。
但是明确的是binary是可 ...

看到这个程序,心中愈发满是悲伤,fortran的世界太强大啊。呵呵
在彭国伦的fortran95程序设计中,确实没有再提到过form可以有binary这个选项,我也是偶然看到朋友的程序用,才发现的,网上对此也评论较少。
但是听闻一些网友评论说,grads只会读binary写的东西,不读unformatted,所以才紧张了一下。最后求问是有grads可有这个挑食的习惯?
互相学习
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-24 21:53:14 | 显示全部楼层
Bubble_liu 发表于 2013-4-24 21:47
看到这个程序,心中愈发满是悲伤,fortran的世界太强大啊。呵呵
在彭国伦的fortran95程序设计中,确实没 ...

grads说实话不大稳定,不过我用fortran写的格点数据全是unformatted的,一点问题都没有,不要听没尝试过的人瞎说,唯独写站点数据的时候unformatted屡次失败,我懒得自己研究原因了,所以就有了你看到的binary的程序。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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