爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4450|回复: 5

[求助] fortran 读取数据时 某一行是空格咋办

[复制链接]

新浪微博达人勋

发表于 2016-6-16 13:26:13 | 显示全部楼层 |阅读模式

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

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

x
各位大神,能不能请教个问题fortran读取数据时,如果遇到某一行只有时间和日期,没有数据怎么办? 也就是说这行空白,实际读取的时候,我把最后面这列设成了字符型的,按我的理解,无数据的时候应该是空格啊,然后我判断是否为空格,然后把数据写回实型的就行了。但实际读出来的时候空格竟然自动赋值,赋的是前面的日期,请问您们遇到过这样的问题吗?该怎么解决呢?





附程序
SUBROUTINE vis_month()
        implicit none
        integer i,j,ii,jj,iz,isn
      parameter(iz=200000,isn=12)
******************   定义分段,分季节和全年定义为5维变量,全年-春夏秋冬 排列  ************
       real vis_mean,vis_mm,vis_all_mean
       dimension vis_mean(isn),vis_mm(isn)
       integer ivis
       real vis_sum,vis
       dimension vis_sum(isn)

               character visal*8

*************************   定义年月日和时次  为字符型的数据  *******************************
        character path*60,a*11,yy*4,mm*2,dd*2,wd*4,hour*2

***********************************************定义时次长度**********************************
       character mon*2
       dimension mon(isn)

       data mon /'01','02','03','04','05','06','07',
     &         '08','09','10','11','12'/
                path='D:\qhz\qhz\vis\'

                open(20,file='vis_month.txt')
                open(21,file='vis_error.txt')

        open(10,file=trim(path)//'vis2007.txt')
         do i=1,isn
        vis_mean(i)=0
       vis_sum(i)=0
         enddo     

        do jj=1,iz,1
        read(10,*,end=31)a,hour,visal

      yy=a(1:4)
      mm=a(6:7)
      dd=a(9:10)
!      print*,yy,mm,dd,' ',hour,' ',visal
!
!      vis=float(ivis)
!      print*,a,hour,ivis
*************************************  日变化  *********************************
        if(trim(visal).ne.' ')then
        read(visal,'(i7)')ivis
        print*,a,hour,ivis
        vis=float(ivis)
        do j=1,isn
         if(mm.eq.mon(j))then

         if(vis.ge.0.0.and.vis.le.10000)then
           vis_mm(j)=vis_mm(j)+vis
         vis_sum(j)=vis_sum(j)+1
        else
        print*,a,hour,vis
        endif
        else
        endif
        enddo

         else
         write(21,*)a,hour,visal
         endif
            enddo
31      continue   


附原始数据和出错
error.png
原始数据.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-6-16 16:40:19 | 显示全部楼层
忘记说了,我用的是win7里的intel fortran。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-16 23:24:08 | 显示全部楼层
你的空格表示错了吧,两个单引号之间要加空格
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-17 15:05:48 | 显示全部楼层
{:5_213:}{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2016-6-19 06:44:53 | 显示全部楼层
你可以设置读取数据的格式,然后先按字符串数组读入,再转换成整型,不知道可不可以
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2020-6-7 10:22:40 | 显示全部楼层
因为缺测资料比较少,已经人工补齐为缺省,谢谢大家。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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