爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: liuzf406

[分享资料] 从气候中下载的160个台站的资料如何处理啊

[复制链接]

新浪微博达人勋

 楼主| 发表于 2012-9-7 10:58:13 | 显示全部楼层

谢谢, 您这里r16006.txt只代表6月份是吗, 意思是我得将12个月的数据存成12个独立的文件,每次运行时都需要改file的名子, 如1月份,file='r16001.txt'. 最后输出的也是12文件, 每月一个?


01.program main         
02.real vec(160,50)
03.real lat(160),lon(160)
04.character*8 stid(160)
05.
06.open(1,file='r16006.txt',status='old')
07.read(1,*) ((vec(i,j),i=1,160),j=1,50)
08.close(1)
09.
10.open(2,file='china.txt')
11.do k=1,160
12.read(2,*) lat(k),lon(k)
13.enddo
14.close(2)
15.
16.do 2 i=1,160
17.2 stid(i)=char(i)
18.
19.open (3,file=r16006.grd',form='binary')
20.do j=1,50
21.tim=0.0
22.nlev=1
23.nflag=1
24.do i=1,160
25.write(3) stid(i),lat(i),lon(i),tim,nlev,nflag,vec(i,j)
26.enddo
27.nlev=0
28.write(3) stid(i-1),lat(i-1),lon(i-1),tim,nlev,nflag
29.enddo
30.close(3)
31.end   
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-9-7 19:56:25 | 显示全部楼层
是的,r代表降水,160是160站,06是月
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-7 20:21:53 | 显示全部楼层
本帖最后由 liuzf406 于 2012-9-7 20:24 编辑
言深深 发表于 2012-9-7 19:56
是的,r代表降水,160是160站,06是月


谢谢您的热心,成功了!

但我用另一种方法却不行, 这是代码和运行后的结果,您帮我看看问题在哪里. 数据是气候中心下载的1951年1月-2012年7月的降水数据:

代码如下:
program ex00
implicit none
integer nlev,nflag,i,j
real lat(160),lon(160),tim,sd(160)
character*8 stid(160)
tim=0.0
nflag=1
open(10,file='61year_160id.txt')
open(20,file='160_sd_1951_2011.txt')
open(30,file='160_sd_1951_2011.grd',form='binary')
do i=1,160
   read(10,*) stid(i),lat(i),lon(i)
enddo
close(10)
do i=1,739
     nlev=1
  do j=1,160
    read(20,*) sd(j)
    write(30) stid(j),lat(j),lon(j),tim,nlev,nflag,sd(j)
  enddo
  nlev=0
  write(30) stid(160),lat(160),lon(160),tim,nlev,nflag
  write(*,*) "Finish writting:",i
enddo
close(20)
close(30)
end

运行结果:

160_sd_1951_2011.jpg

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

新浪微博达人勋

 成长值: 0
发表于 2012-9-7 21:09:42 | 显示全部楼层
应该是你"20"号的文件里面数据的存储方式和你的读取方式的问题,“20”里面存储的数据可能是多列的,这样你在read(20,*)sd(j)的时候顺序有误
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-7 21:20:35 | 显示全部楼层
本帖最后由 liuzf406 于 2012-9-7 21:22 编辑
言深深 发表于 2012-9-7 21:09
应该是你"20"号的文件里面数据的存储方式和你的读取方式的问题,“20”里面存储的数据可能是多列的,这样你 ...


"20"文件就是我下载的降水数据, 我把每个月160个站点的数据都放在同一个txt文件里, 总共是739个月, 从1951年1月到2012年7月. 是不是我原始的txt数据存放有误啊? 这12个月160个站点的数据应该如何存放啊?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-9-7 22:16:49 | 显示全部楼层
你用surfer打开查看一下,看看数据一共多少列,我感觉是不是大约每行有20个数左右,这样你读取的时候每行读取一个,所以只读取了39*160行程序宣告结束,因为下面没有数据了···end···你查看一下看看啊,可能是这样的问题
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-9-7 22:16:58 | 显示全部楼层
你用surfer打开查看一下,看看数据一共多少列,我感觉是不是大约每行有20个数左右,这样你读取的时候每行读取一个,所以只读取了39*160行程序宣告结束,因为下面没有数据了···end···你查看一下看看啊,可能是这样的问题
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-8 07:18:00 | 显示全部楼层
本帖最后由 liuzf406 于 2012-9-8 07:42 编辑
言深深 发表于 2012-9-7 22:16
你用surfer打开查看一下,看看数据一共多少列,我感觉是不是大约每行有20个数左右,这样你读取的时候每行读 ...


您真是厉害啊,数据是5912行*20列=118240.  从1月到7月, 每个月有496行*20列=9920, 从8月到12月, 每个月488行*20列=9760 (没有2012年的数据), 这该如何读啊?
谢谢!

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

新浪微博达人勋

 成长值: 0
发表于 2012-9-8 15:20:10 | 显示全部楼层
可以通过:
1,限定格式来读取比如read(20,"(20fx.y)") sd(j),其中x是单个数据占用字节长度,y是小数点后面的位数或者;
2,隐式循环,加一个简单的计算,比如:
do i=1,m
read(20,*)(x((i-1)*20+j),j=1,20)
enddo
前者需要每个数占用的位数一致,数对了才行;后者理解起来有一定难度,自己思考一下应该能够明白
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-8 15:40:11 | 显示全部楼层
言深深 发表于 2012-9-8 15:20
可以通过:
1,限定格式来读取比如read(20,"(20fx.y)") sd(j),其中x是单个数据占用字节长度,y是小数点后面 ...

谢谢您的指点, 我努力学着试试看!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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