爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7766|回复: 12

[经验总结] 用循环体读取格点数据的注意事项

[复制链接]

新浪微博达人勋

发表于 2017-1-12 09:24:37 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Y-xing 于 2017-1-16 21:55 编辑

环境:win10,gfortran
最近用fortran读取从fnl提取出来的121个时次,31层的全球风场资料时,利用外循环的方式读取失败。代码如下:
  1. OPEN(11,FILE=FL1,FORM='unformatted')
  2.       DO IT=1,NT
  3.         DO K=1,NZ
  4.         DO J=1,NY
  5.         DO I=1,NX
  6.            READ(11) hgt(I,J,K,IT)
  7.         ENDDO
  8.         ENDDO
  9.         ENDDO
  10.         ENDDO
  11.         CLOSE(11)
复制代码
经修改,用如下代码读取成功
  1. OPEN(11,FILE=FL1,FORM='unformatted',access='DIRECT',status="old",RECL=recl2)
复制代码
IREC=1
DO IT=1,NT
    DO K=1,NZ
        READ(11,rec=IREC) ((hgt(I,J,K,IT),I=1,NX),J=1,NY)
        IREC=IREC+1
    ENDDO
    print*,IT
enddo
CLOSE(11)

其实,读取文件还是很有讲究的,比如,FORM='unformatted',access='DIRECT',status="old",RECL='' ''.循环体的运用也很有讲究,在这里我就不误导大家有,有兴趣可以下载彭国伦版fortran95 学习。
参考资料还有GrADS使用手册里面的fortran程序,有很大的参考价值。
题外话,论坛使用资料很多,如果能够整理一下,弄个问题清单,相信会很实用。

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

新浪微博达人勋

发表于 2017-1-12 10:49:45 | 显示全部楼层
赞。。。。。。。。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 成长值: 0
发表于 2017-1-12 14:51:10 | 显示全部楼层
那啥,你看看你第一个错了是不是因为unformatted两侧的引号不一样···要么用单引号、要么都是双引号
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-16 21:54:44 | 显示全部楼层
言深深 发表于 2017-1-12 14:51
那啥,你看看你第一个错了是不是因为unformatted两侧的引号不一样···要么用单引号、要么都是双引号

是错了,复原原代码时没注意。现在改过来。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-18 15:52:40 | 显示全部楼层
非常感谢您的分享,谢谢了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-22 12:26:37 | 显示全部楼层
楼楼,你第一个程序是读有格式文本用的,一般用来读文本数据,但是open的关键字form要用'formatted'
楼楼可以看一下open的那几个关键字的选项和含义哦
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-24 22:31:03 | 显示全部楼层
學習了,謝謝!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-26 22:24:23 | 显示全部楼层
ljchen1989 发表于 2017-1-22 12:26
楼楼,你第一个程序是读有格式文本用的,一般用来读文本数据,但是open的关键字form要用'formatted'
楼楼 ...

我读的是二进制文件,不是文本格式数据。不知道你从哪里看出来我第一个程序是读有格式文本用的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-27 08:48:53 | 显示全部楼层
Y-xing 发表于 2017-1-26 22:24
我读的是二进制文件,不是文本格式数据。不知道你从哪里看出来我第一个程序是读有格式文本用的。

OPEN(11,FILE=FL1,FORM='formatted')
      DO IT=1,NT
        DO K=1,NZ
        DO J=1,NY
        DO I=1,NX
           READ(11) hgt(I,J,K,IT)
        ENDDO
        ENDDO
        ENDDO
        ENDDO
        CLOSE(11)

如果是酱紫就是读有格式文本数据~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-28 16:48:38 | 显示全部楼层
ljchen1989 发表于 2017-1-27 08:48
OPEN(11,FILE=FL1,FORM='formatted')
      DO IT=1,NT
        DO K=1,NZ

嗯嗯,对。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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