爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2737|回复: 7

[求助] 批处理的fortran程序,单独运行没有问题,批处理时结果出现三个后就越界

[复制链接]

新浪微博达人勋

发表于 2016-9-17 11:12:03 | 显示全部楼层 |阅读模式

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

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

x
        求大神指点!
       program anshan_airpollution
        integer yy,mm,dd,hh,start_year,end_year,p,q
        parameter(start_year=2013,end_year=2016,q=175)
        character stn*20,tt*8,b*10,c*20,city*10,stn_name*20(20),fil*16(q)
        real a(8)
        type daily_data
                integer number
                real airp_c(0:23,8)
                character level(0:23)*10,pollutant(0:23)*20,tt(0:23)*8,city(0:23)*10
                logical hh_exist(0:23)
        end type


        type(daily_data) ap(20,start_year:end_year,12,31)
    open(11,file='e:/data/fil.name.txt')
    do p=1,q
       read(11,*) fil(p)
    enddo

   do p=1,q       
        !数据初始化
        do l=1,20
                do yy=start_year,end_year
                        do mm=1,12
                                do dd=1,31
                                        ap(l,yy,mm,dd).hh_exist=.false.
                                        ap(l,yy,mm,dd).number=0
                                        ap(l,yy,mm,dd).city=''                                       
                                        ap(l,yy,mm,dd).tt=''                                       
                                        ap(l,yy,mm,dd).airp_c=0
                                        ap(l,yy,mm,dd).level=''
                                        ap(l,yy,mm,dd).pollutant=''
                                enddo
                        enddo
                enddo
        enddo

        !读入指定文件的数据
    open(1,file='e:/data/12/12last/'//trim(adjustl(fil(p)))//'.txt')
        !open(1,file='e:/data/12/12last/baotou7-12.txt',action='read')
       
        do
                read(1,*,end=10),stn,yy,mm,dd,tt,city,a(1:8),b,c
                k=0
                l=0
                do i=1,20
                        if(stn==stn_name(i)) then
                                l=i
                                k=1
                                exit
                        endif
                enddo
                if(k==0) then
                        stn_number=stn_number+1
                        l=stn_number
                        stn_name(l)=stn
                       
                endif
                !计算小时
                do i=1,8
                        if(tt(i:i)==':') then
                                read(tt(1:i-1),*),hh
                                exit
                        endif
                enddo               
                ap(l,yy,mm,dd).tt(hh)=tt
                ap(l,yy,mm,dd).hh_exist(hh)=.true.
                ap(l,yy,mm,dd).number=ap(l,yy,mm,dd).number+1               

                ap(l,yy,mm,dd).city(hh)=city               
                ap(l,yy,mm,dd).airp_c(hh,:)=a
                ap(l,yy,mm,dd).level(hh)=b
                ap(l,yy,mm,dd).pollutant(hh)=c
        enddo

10        close(1)
        !输出
        !open(2,file='e:/data/control/result.txt')
        open(2,file='e:/data/control/1/'//trim(adjustl(fil(p)))//'.txt')
        do l=1,stn_number
                do yy=start_year,end_year
                        do mm=1,12
                                do dd=1,31
                                        if(ap(l,yy,mm,dd).number.LE.19) then
                                                ap(l,yy,mm,dd).pollutant='-999'
                                                ap(l,yy,mm,dd).level='-999'
                                                ap(l,yy,mm,dd).airp_c=-999
                                        endif       
                                        do hh=0,23
                                                if(ap(l,yy,mm,dd).hh_exist(hh)) then
                                                        write(2,100),stn_name(l),yy,mm,dd,ap(l,yy,mm,dd).tt(hh),ap(l,yy,mm,dd).city(hh),&
                                                        ap(l,yy,mm,dd).airp_c(hh,1:8),ap(l,yy,mm,dd).level(hh),ap(l,yy,mm,dd).pollutant(hh)
                                                endif
                                        enddo                                               
                                enddo
                        enddo
                enddo
        enddo
100 format(a12,2x,i4,2x,i2,2x,i2,2x,a8,2x,a10,3f8.2,f10.3,4f8.2,2x,a10,2x,a20)
        close(2)
end do
end

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

新浪微博达人勋

发表于 2016-9-17 11:14:34 | 显示全部楼层
报错截图
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2016-9-17 11:20:36 | 显示全部楼层
以上为报错截图。
报错.PNG
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-9-17 11:43:04 | 显示全部楼层
1.看看到底是在哪一步越界的,或者说那个数组越界了。
2.重点看下计数器,比如stn_number这个,似乎没有清零过
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-9-17 15:13:06 | 显示全部楼层
lqouc 发表于 2016-9-17 11:43
1.看看到底是在哪一步越界的,或者说那个数组越界了。
2.重点看下计数器,比如stn_number这个,似乎没有清 ...

时这一步越界的:stn_name(l)=stn。但是不知道怎么改。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-9-17 15:27:17 | 显示全部楼层
那不就是我跟你说的么
  stn_number=stn_number+1
   l=stn_number
   stn_name(l)=stn
就这个stn_number,出问题了,至于怎么改我也不知道你这个数是用来干啥的,能不能清零。
你可以试试在最后那个end do之前加一个 stn_number=0
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-9-17 15:42:01 | 显示全部楼层
大神果然厉害,程序好了,非常非常感谢您!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-9-18 08:15:53 | 显示全部楼层
楼上魔术师的造诣  可以开fortran课程了  
第一个报名参加
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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