| 
 
	积分46418贡献 精华在线时间 小时注册时间2011-9-8最后登录1970-1-1 
  成长值: 19710
 | 
 
| 
为了响应版主们的号召,我找了很久很久才从箱底找个一个很久很久前帮一个师姐编的程序,批处理CMA_TCBestTrack数据,
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  CMA_TCBestTrack数据来自中国台风网http://www.typhoon.gov.cn/data/detail.php?id=33&type=5&style=
 写得比较烂,大家觉得有用就看看,没用也要给点分哦~
  
 
 !-------------------自定义type类型记录每个TC路径数据-----------------------
 module typedef
 implicit none
 type bst
 character(len=5)  :: A  !资料分类标志, '66666'表示最佳路径资料
 character(len=4)  :: B  !国际编号, 年份的最后两位数+两位数的编号
 character(len=3)  :: C  !路径数据记录的行数
 character(len=4)  :: D  !包括热带低压在内的热带气旋序号;
 character(len=4)  :: E  !我国对热带气旋的编号
 character(len=1)  :: F  !热带气旋终结记录, 0表示消散, 1表示移出西太台风委员会的责任海区, 目前暂时全置为0
 character(len=1)  :: G  !每行路径间隔小时数, 目前均为6(小时)
 character(len=20) :: H  !热带气旋的英文名称, 名称后加 “(-1)n” 表示副中心及其序号
 character(len=8)  :: I  !数据集形成的日期
 integer,allocatable :: ymdh(:)  !年月日时, 时间为世界时
 integer,allocatable :: IM(:)    !强度标记,0表示未达到热带低压强度,1表示热带低压, 2热带风暴,3强热带风暴,
 !4台风,5强台风, 6超强台风,9变性气旋
 integer,allocatable :: lat(:)   !纬度(0.1°N)
 integer,allocatable :: long(:)  !经度(0.1°E)
 integer,allocatable :: pres(:)  !近中心最低气压(百帕: hPa)
 integer,allocatable :: wnd(:)   !近中心最大风速(米/秒: m/s),WND=9表示风速<10m/s
 end type
 end module
 
 program main
 use typedef
 implicit none
 type(bst) :: tc(100)
 integer NUM                       !记录TC个数
 integer i,j,k,iniC,io
 integer ymdh_end,IM_end,lat_end,long_end,pres_end,wnd_end !记录文件中最后一行路径数据
 character(len=14) filename
 character(len=4) cTemp
 integer n(12)                      !记录每个月TC生成的个数
 
 open(20,file="TC.txt")              !打开记录数据处理结果的文件
 !========================批处理读取文件==========================
 do k=1949,2009
 write(cTemp,'(I4)') k
 filename='CH'//cTemp//'BST.txt'  !或filename='CH'//trim(adjustl(cTemp))//'BST.txt'
 write(*,*) "正在处理文件:",filename,"..."
 do i=1,12
 n(i)=0
 end do
 NUM=1
 !-----------------------读取文件中的TC路径数据------------------------
 open(10,file=filename,form="formatted",status="old",position="rewind")
 do while(.true.)
 !===========================================================================!
 read(10,*,iostat=io)tc(NUM)%A,tc(NUM)%B,tc(NUM)%C,tc(NUM)%D,tc(NUM)%E,tc(NUM)%F,tc(NUM)%G,tc(NUM)%H,tc(NUM)%I
 if(io < 0) exit
 !============================================================================!
 read(tc(NUM)%C,"(I3)") iniC  !路径数据记录的行数(字符型转整型)
 
 allocate (tc(NUM)%ymdh(iniC))
 allocate (tc(NUM)%IM(iniC))
 allocate (tc(NUM)%lat(iniC))
 allocate (tc(NUM)%long(iniC))
 allocate (tc(NUM)%pres(iniC))
 allocate (tc(NUM)%wnd(iniC))
 do j=1,iniC
 read(10,*)tc(NUM)%ymdh(j),tc(NUM)%IM(j),tc(NUM)%lat(j),tc(NUM)%long(j),tc(NUM)%pres(j),tc(NUM)%wnd(j)
 end do
 !     write(*,*)num
 !   if(tc(NUM)%ymdh(iniC)==ymdh_end) exit  !判断读到文件末尾,退出循环停止读取
 
 NUM=NUM+1
 end do
 close(10)
 write(*,*) "=======Data successfully read========"
 !write(*,*) "The total number of TC in ",cTemp,"is:",NUM
 
 !-----------------------计算每个月TC生成个数------------------------
 do i=1,NUM-1
 n(mod(tc(i)%ymdh(1)/10000,100))=n(mod(tc(i)%ymdh(1)/10000,100))+1
 end do
 
 write(*,*) n(1:12)
 write(20,*) "========================================================"
 write(20,*) "The total number of TC in ",cTemp," is:",NUM-1
 write(20,*) "The number of TC in every month is:"
 write(20,*) n(1:12)
 write(20,*) "========================================================"
 write(*,*) "文件",filename,"处理完毕!"
 write(*,*) " "
 end do
 close(20)
 stop
 end
 
 
 
 
 | 
 评分
查看全部评分
 |