爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 11818|回复: 27

[源代码] 气候中心160个站点数据提取至各个站点命名的文件中

[复制链接]

新浪微博达人勋

发表于 2016-6-26 20:04:07 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 晓风残月 于 2016-6-26 20:46 编辑

类似的帖子其实论坛里面是有一个的,但有时候需要批处理一堆数据,正好有朋友问我要,就写了一个可移植性相对稍高的程序代码,仅供参考,欢迎指错。
代码不卖了,直接贴出来。
需要说明的是,下面的代码其中用到一个filename.txt,其实就是气候中心的站点说明,其中保留了站号和经纬度,不愿意自己倒腾的可以下载我的代码和文件
program dataread
    implicit none
    !
    integer, parameter :: n=160, m=66, iyb=1951  !m=2016-1951+1=66
    integer :: i, j, k, kk, end_num
    real, dimension(n,m,12) :: tt
    integer, dimension(n) :: sta
    real, dimension(n) :: lat, lon
    integer, dimension(12) :: num
    character(50) :: path='F:\data\', path_out='F:\data\Tem\', station, mm
    !
    open(11,file=trim(path)//'filename.txt')
        do i = 1, n
            read(11,*) sta(i), lat(i), lon(i)
        end do
    close(11)
    ! 读取所有站12个月的数据
    tt = -9999
    do k = 1, 12
        write(mm,'(i2.2)') k
        open(13,file=trim(path)//'t16'//trim(mm)//'.txt',status='old')
        !
        num(k) = 0
        do
            read(13,*,iostat=end_num)
                if(end_num==0) then
                    num(k) = num(k) + 1
                else
                    exit
                end if
        end do
        !
        rewind(13)
        if(num(k)*20/160==m) then
            read(13,*) ((tt(i,j,k),i=1,n),j=1,m)
        else
            read(13,*) ((tt(i,j,k),i=1,n),j=1,m-1)
        end if
        close(13)
    end do
    ! 温度数据乘以0.1,若是降水数据请删除此部分
    tt=tt*0.1
    !
    do k = 1,12
        if(num(k)*20/160/=m) then
            kk = k-1
            exit
        end if
    end do
    ! 存入以站点号命名的文件中
    do i = 1, n
        write(station,'(i5)') sta(i)
        open(12,file=trim(path_out)//trim(station)//'.txt',status='replace')
        write(12,'(a5,12(a8))') 'Year', 'Jan.','Feb.','Mar.','Apr.','May.','Jun.','Jul.','Aug.','Sep.','Oct.','Nov.','Dec.'
            do j = 1, m-1
                write(12,'(i5,12f8.1)') iyb+j-1, tt(i,j,1:12)
            end do
            write(12,'(i5,<kk>f8.1)') iyb+m-1, tt(i,j,1:kk)
        close(12)
    end do
end program dataread



QQ截图20160626205336.png
QQ截图20160626205307.png

filename.txt

3.91 KB, 下载次数: 48, 下载积分: 金钱 -5

Source1.f90

1.87 KB, 下载次数: 20, 下载积分: 金钱 -5

评分

参与人数 1金钱 +10 贡献 +6 收起 理由
lqouc + 10 + 6

查看全部评分

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

新浪微博达人勋

发表于 2016-6-26 20:12:11 | 显示全部楼层
不错不错
。。。。。。。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2016-6-26 20:26:49 | 显示全部楼层
lqouc 发表于 2016-6-26 20:12
不错不错
。。。。。。。

省略号的意思是觉得我太有钱了?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-26 20:56:38 | 显示全部楼层
晓风残月 发表于 2016-6-26 20:26
省略号的意思是觉得我太有钱了?

居然看出来省略号是有其他意思。
你这么闲居然有时间做这些,等我有空了找你吧。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-6-26 21:12:38 | 显示全部楼层
lqouc 发表于 2016-6-26 20:56
居然看出来省略号是有其他意思。
你这么闲居然有时间做这些,等我有空了找你吧。

有朋友要你不能不做啊。好啊,你回头找我吧,最近正好有些事
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-27 13:29:58 | 显示全部楼层
怎么感觉这是一对基友的友情对话
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-27 13:37:36 | 显示全部楼层
topmad 发表于 2016-6-27 13:29
怎么感觉这是一对基友的友情对话

是师姐和师弟
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-27 16:44:57 | 显示全部楼层

防火防盗防师兄

现在师姐有男朋友了吗??
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-27 20:00:05 | 显示全部楼层
菜鸟问一个问题,我们国家的160站降水资料时间多长?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-6-27 22:29:14 | 显示全部楼层

让我猜一下,你是我师弟的女朋友?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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