爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6576|回复: 23

[求助] 利用Fortran做单一站点多时次txt转换grd时候出错!

[复制链接]

新浪微博达人勋

发表于 2016-3-1 11:01:21 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 二子搞研究 于 2016-3-1 11:25 编辑

之前参考的清风大神的贴子,但是因为我是单一站点多时次的(见下图),stid部分是我自己补上的,因为没有这个好像grads就不承认是站点数据(个人理解)。数据总共是338行,即总时次为338,之前数据的时间序列是不连续的,-32766部分是我自己补上的缺测值方便数据时间上连续,好处理一些
data.jpg
Fortran部分:
  Program sta2grd
    parameter (itt=338)

    character*8 stid
    character lat,lon,value(itt),tim   #
这个地方我写real老出错,所以改成了character
    integer nlev,flag,j
    open(1,file='F:\cygwindata\lagcor\fortran\value.txt',status='old')
      do j=1,itt
       read(1,*)   

#这个地方我不知道到底要不要加上,因为第一行确实没数据啊,从第二行开始的,但看论坛里其他人的有些是没有这些的,但加上这个就会出错!提示"end of file encountered"
       read(1,*)stid,lat,lon,value(j)
       end do
       close(1)
    open(2,file='F:\cygwindata\lagcor\fortran\value.grd',status='replace',form='binary')
    do j=1,itt

    tim=0.0
    nlev=1
    flag=1
    write(2)stid,lat,lon,tim,nlev,flag,value(j)
    enddo
    nlev=0
    write(2)stid,lat,lon,tim,nlev,flag
    close(2)
      end

ctl部分
ctl.jpg
最后提示错误:
error2.jpg
求大神指点!

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

新浪微博达人勋

发表于 2016-3-1 11:22:10 | 显示全部楼层
你这个还设置要贡献,谁会帮你解决问题啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-3-1 11:25:46 | 显示全部楼层
nunu18 发表于 2016-3-1 11:22
你这个还设置要贡献,谁会帮你解决问题啊

不好意思啊,我的本意是想给解决问题的人2个贡献呢,设置错了!现在改过来了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-1 11:43:44 | 显示全部楼层
还没尝试运行,也很久没写站点资料了,但是很明显,character的数据属性肯定是错的,而且很明显fortran读入的时候lon和lat是 不对应的,所以你先改掉第一处错误试试看,还有,检查一下你的数据文件是不是只用【一个】tab或者空格分割数据,以上
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-1 11:56:15 | 显示全部楼层
do j=1,itt
       read(1,*)   
#这个地方我不知道到底要不要加上,因为第一行确实没数据啊,从第二行开始的,但看论坛里其他人的有些是没有这些的,但加上这个就会出错!提示"end of file encountered"

原因,read(1,*)  应该在循环外,否则读数据会跳行读。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-1 12:04:19 | 显示全部楼层
  character lat,lon,value(itt),tim ,是REAL,如果出错你把VALUE(ITT)单独拿出来放一行。
提示"end of file encountered'是因为你的数据溢出了,所以你循环的时候(itt=338+1),就行了。加上implicte none 避免程序出错。这样试试
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-3-1 14:05:51 | 显示全部楼层
Lancelot 发表于 2016-3-1 11:43
还没尝试运行,也很久没写站点资料了,但是很明显,character的数据属性肯定是错的,而且很明显fortran读入 ...

亲亲,多谢,确实txt文件里有两列数据是两个空格的,后来删掉了,再结合其他人的意见,改成如下的版本
                  Program sta2grd
                 parameter (itt=338)
                 character*8 stid
                real lat,lon,tim
               real iso(itt)  #把它单独拿出来定义了
                integer nlev,flag,j
     open(1,file='F:\cygwindata\lagcor\fortran\iso2.txt',status='old')
                 read(1,*) #放在了循环的外面
               do j=1,itt
                 read(1,*)stid,lat,lon,iso(j)
               end do
               close(1)
      open(2,file='F:\cygwindata\lagcor\fortran\value.grd',status='replace',form='binary')
                 tim=0.0
                nlev=1
                flag=1
              do j=1,itt
                  write(2)stid,lat,lon,tim,nlev,flag,iso(j)
              enddo
                nlev=0
                write(2)stid,lat,lon,tim,nlev,flag
                close(2)
               end
还是用的之前的ctl文件,出来的错误,看起来比之前好了一些,但还是有错误,说possible causes:premature EOF
error3.jpg

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

新浪微博达人勋

 楼主| 发表于 2016-3-1 14:06:37 | 显示全部楼层
nunu18 发表于 2016-3-1 12:04
character lat,lon,value(itt),tim ,是REAL,如果出错你把VALUE(ITT)单独拿出来放一行。
提示"end of fi ...

已经按照亲你说的改了,回复在楼下,还是出错了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-3-1 14:37:39 | 显示全部楼层
@river 呼叫大神!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-1 15:53:38 | 显示全部楼层
二子搞研究 发表于 2016-3-1 14:05
亲亲,多谢,确实txt文件里有两列数据是两个空格的,后来删掉了,再结合其他人的意见,改成如下的版本
  ...

再认真看下清风的帖子哈。
你想要的是1个站点338个时刻,现在你写的方法表示的是338个站点1个时刻。改改循环的位置就行了。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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