| 
 
	积分6750贡献 精华在线时间 小时注册时间2012-9-3最后登录1970-1-1 
 | 
 
| 
本帖最后由 wuyejincao 于 2014-8-1 09:10 编辑
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  
 相信很多常用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页。。。
 
 
 
 
 
 | 
 |