- 积分
- 6009
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-11-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
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
|
评分
-
查看全部评分
|