[Fortran] 纯文本查看 复制代码
program fkk
implicit none
character(len=512)::cRead
! character(len=20)::filename,DYfilename
character(len=20)::wwlln_date,wwlln_time
real::lat,lon
character(len=5)::timingerror
character(len=2)::station
integer::status1=0
integer::month,month1
integer::i,j
open(11,file='2014.txt',status='old',form='formatted')
open(12,file='record.txt',status='replace')
OPEN(21,file='month1.txt',status='replace',form='formatted')
OPEN(22,file='month2.txt',status='replace',form='formatted')
OPEN(23,file='month3.txt',status='replace',form='formatted')
OPEN(24,file='month4.txt',status='replace',form='formatted')
OPEN(25,file='month5.txt',status='replace',form='formatted')
OPEN(26,file='month6.txt',status='replace',form='formatted')
OPEN(27,file='month7.txt',status='replace',form='formatted')
OPEN(33,file='month8.txt',status='replace',form='formatted')
OPEN(29,file='month9.txt',status='replace',form='formatted')
OPEN(30,file='month10.txt',status='replace',form='formatted')
OPEN(31,file='month11.txt',status='replace',form='formatted')
OPEN(32,file='month12.txt',status='replace',form='formatted')
do while(.true.)
READ(11,"(A512)",iostat=status1)cRead
if (status1/=0) exit
CALL parserRead(cRead)
! write(*,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
! READ(wwlln_date(1:4),"(I4)")year
! write(*,*)year
write(*,*) LEN_TRIM(wwlln_date)
if(LEN_TRIM(wwlln_date)/=10) then !这里是因为我的文件中大部分日期格式例如:2014/08/12,但有的月份是2014/8/10或者2014/8/1
CALL specialread(wwlln_date)
write(12,*)month1
else
READ(wwlln_date(6:7),"(I2)")month
write(*,*)wwlln_date,month
end if
if(month==1) write(21,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
if(month==2) write(22,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
if(month==3) write(23,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
if(month==4) write(24,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
if(month==5) write(25,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
if(month==6) write(26,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
if(month==7) write(27,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
if(month==8) write(33,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
if(month==9) write(29,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
if(month==10) write(30,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
if(month==11) write(31,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
if(month==12) write(32,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
do i=21,32,1
j=i-20
if(month1==j) write(i,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
end do
end do
CLOSE(11)
CLOSE(12)
contains
!调用子程序
subroutine parserRead(c)
character(len=*)::c
integer::j
do j=1,LEN_TRIM(c)
if (c(j:j)=="/") c(j:j)="|"
end do
READ(c,*)wwlln_date,wwlln_time,lat,lon,timingerror,station
do j=1,LEN_TRIM(wwlln_date)
if (wwlln_date(j:j)=="|") wwlln_date(j:j)="/"
end do
end subroutine parserRead
subroutine specialread(d)
character(LEN=*)::d
READ(d(6:6),"(I1)")month1
end subroutine specialread
end program