- 积分
- 6723
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-9-3
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 wuyejincao 于 2014-8-1 09:10 编辑
相信很多常用Fortran程序的人来说,经常遇到form='binary'或者form='unformatted'的问题。一般如果自己编程,通常会选择一种自己习惯的,比如现在很多人喜欢用binary。但突然有一天,从高手那拷贝了个程序,发现用的是form='unformatted',一下子茫然了,所以这里说一下我对这两者的理解。
由于底下回复的某位同学有完全不同意见,我加一条我的试验环境。
我是windows 7 64位下的Intel Fortran XE 2011。并且实验结果始终是在同一款软件下。
首先,两者都是二进制格式。
其次,我总结的结果是在长度上'unformatted='binary'*4。请看下面分析:
比如说现在有
假如现在有rain(m*n*nt)的一个三维数组,要求写进文件1里面去。
例1:open(12,file=file1,form='unformatted',access='direct',recl=m*n)
例2:open(12,file=file1,form='binary',access='direct',recl=m*n)
写数据的时候都用下列语句:
irec=1
do k=1,nt
write(12,rec=irec)((rain(i,j,k),j=1,n),i=1,m)
irec=irec+1
enddo
出现的结果是例1生成的数据文件是例2的4倍。所以如果把例2的recl=m*n改成recl=4*m*n才生成同样大小的文件。也就是说'unformatted='binary'*4
为啥会这样呢?
厄。。。我也不知道。。。随便聊聊。。。
刚搜索一下论坛,发现大家对这两者的关系比较模糊。比如下面这个帖子:http://bbs.06climate.com/forum.php?mod=viewthread&tid=13784
有的说binary读的时候不要用recl,有的认为程序走不通的时候把unformatted改成binary就好了,真是五花八门,各种说法。
除了上面的区别,再说几点见解:
1.open(11,file=file1,form='binary')这种格式确实用起来比较方便。
2.但是万一你要用到直接读取的时候情况就不一样。这时候就要用到recl了。
如果你要问我顺序读取和直接读取的区别。。。我会叫你把彭国伦的Fortran书翻到234页。。。
|
|