爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2659|回复: 1

[源代码] 急急急!!如何处理批处理读取不同行我数据文件。MICAPS第三类数据

[复制链接]

新浪微博达人勋

发表于 2016-4-25 14:17:10 | 显示全部楼层 |阅读模式

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

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

x
因为这些数据文件每个都是不同的行数,我想批量处理两年的数据,尝试用do while(.not.eof(文件号))来判断每个文件的行数,能判断出来,但是在处理的时候老是提示错误。以下是程序代码,望高手帮忙解决 万分感谢了
program  main
      implicit none
  
      integer :: i,j,m,n,k,c,L,iw,ix,kx,ky,jx,jy,dy,len
      parameter(L=3000)
      real ::tmax(L),tmin(L)
      integer ::sta(L)
      real ::lat(L),lon(L),height(L)
      integer ::nline
      character(len=20)::b,fileName
      character(len=2)::yy,mm,day

        do kx=14,15  !年
             write(yy,'(i2)') kx
             yy=trim(adjustl(yy))
             if(len_trim(yy)<2) yy='0'//yy
       write(*,*)yy
         do jx=1,12 !月
          write(mm,'(i2)') jx
                mm=trim(adjustl(mm))
                if(len_trim(mm)<2) mm='0'//mm
                 if(jx==2) then
                    len=28
                 elseif(j==4.or.j==6.or.j==9.or.j==11) then
                      len=30
                 else
                      len=31
                 end if
       write(*,*)mm,len
       do dy=1,len
        write(day,'(i2)') dy
        day=trim(adjustl(day))
        if(len_trim(day)<2) day='0'//day
        write(*,*)day
!       write(*,*)yymmday20
       open(unit=21,file="D:\fortran\data\sk\tmax\"//yy//mm//day//"
     &02.000",access="sequential",form="formatted",status="old")  
       open(unit=23,file="D:\fortran\data\sk\tmax\sk_tmax_
     &"//yy//mm//day//"02.txt")   
     
!      nstn=2404
       nline=0
        do while(.not.eof(21))
         nline=nline+1   
         read(21,*)   从这里开始程序就提示错误了
        enddo
        write(*,*)nline
          do k=1,5
          read(21,*)
          enddo
          do i = 6,nline
             read(21,*)sta(i),lon(i),lat(i),height(i),tmax(i)
            if(tmax(i)>1000.00)then
                 tmax(i)= 999.00
               write(23,"(I8,F8.2)")sta(i),tmax(i)
            else
                 tmax(i)=tmax(i)   
               write(23,"(I8,F8.2)")sta(i),tmax(i)
            endif
!            if(rain1(i)<0) pause
          enddo
   
  
      close(21)
      close(23)
     
      enddo !日
      enddo !月
      enddo !年
      
      end

错误提示就是end of file during read ,unit 21,file  D:\fortran\data\sk\tmax\14010102.000
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-4-25 14:18:33 | 显示全部楼层
数据是这种形式:

diamond 3 14年01月01日02时地面最高温度
14 01 01 02   -3
0
      1     25      0
    1    830
54096  131.15   44.38  498   -4.4
50246  124.71   52.31  359  -20.9
58362  121.46   31.41    5   14.1
54195  129.76   43.33  241   -2.8
55472   88.63   30.95 4671    1.8
55279   90.02   31.37 4701    1.1
55597   91.68   29.03 3741    9.5
57523  107.70   29.88  214   12.2
54523  117.10   39.40    7    9.6
.......
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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