爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3160|回复: 8

[求助] 空白值读取问题

[复制链接]

新浪微博达人勋

发表于 2015-4-14 11:18:26 | 显示全部楼层 |阅读模式

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

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

x
!!!!!原始数据!!!!!!!
城市    AQI指数
北京市         
天津市   58   
石家庄市  75   
唐山市   53   
秦皇岛市  51   
邯郸市   55   
邢台市   65   
保定市   130   
承德市   57   
沧州市   67   
廊坊市   74   
衡水市   70   
张家口市  42   
太原市   69   
大同市   48   
阳泉市   61   
长治市   64   
临汾市   53   
呼和浩特市 132   
包头市   94   
赤峰市   74   
鄂尔多斯市 83   
沈阳市   56   
!!!!!!!!!!!!!!!!!!!!!

以上为原始数据的一部分,像北京市这样缺测值为空白的应该怎么读取出来?由于数据量很大,将空格改为9999工作量太大,请问有没有其他方法可以实现?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-14 12:27:35 | 显示全部楼层
用字符串读取每一行记录,定位其中的字符“市”(或者你用左起第一个空格字符也行,这个就目测规律啦)的位置i,再判断字符串i+3:i+6,如果是空白aqi就赋值缺省喽。
诸如此类的小方法,就多3、4行代码,自己写写吧。

评分

参与人数 1金钱 +2 收起 理由
小傅之追梦 + 2 很给力!

查看全部评分

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

新浪微博达人勋

 楼主| 发表于 2015-4-14 15:13:48 | 显示全部楼层
lqouc 发表于 2015-4-14 12:27
用字符串读取每一行记录,定位其中的字符“市”(或者你用左起第一个空格字符也行,这个就目测规律啦)的位 ...

大神能不能给写个例子啊。我fortran学的太烂,用字符串只能读出来某某市,不会读整行的数,而且要怎么定位“市”的位置啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-14 16:34:59 | 显示全部楼层
schLltt 发表于 2015-4-14 15:13
大神能不能给写个例子啊。我fortran学的太烂,用字符串只能读出来某某市,不会读整行的数,而且要怎么定 ...

其实很简单,尝试一下呗,谁都是从很烂开始的。别把‘不会’挂在嘴边,这次就先给你写一下,希望你以后成为大神能够回来帮助论坛里的其他人。
read (11 , '(a20)') a
loc = index (a , ' ')
if (a(loc+2:loc+4) .ne. '   ') then
read (a(loc+2:loc+4) , '(i3.3)') aqi
else
aqi = -999
end if
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-4-14 20:12:09 | 显示全部楼层
lqouc 发表于 2015-4-14 16:34
其实很简单,尝试一下呗,谁都是从很烂开始的。别把‘不会’挂在嘴边,这次就先给你写一下,希望你以后成 ...

请问a(loc+2:loc+4)是什么意思啊。loc定义的是空格的位置吧,下面不就应该是判断 a(loc+1:loc+3)是不是为空白值吗(空格的后一个字符到后三个字符),可是我这样设置了,运行时又出错。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-14 20:33:24 | 显示全部楼层
schLltt 发表于 2015-4-14 20:12
请问a(loc+2:loc+4)是什么意思啊。loc定义的是空格的位置吧,下面不就应该是判断 a(loc+1:loc+3)是不是为 ...

没给上下文,没给报错信息,我也给你解决不了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-4-14 22:19:32 | 显示全部楼层
lqouc 发表于 2015-4-14 20:33
没给上下文,没给报错信息,我也给你解决不了。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!这个是写的程序!!!!!!!!!!!
program main
   implicit none
   character(len=16)  lon,lat,chen,A
   integer,parameter:: m=161,n=22
   real:: b1(m),b2(m)
   character*10:: a1(m)
   integer i,j,a2(m),loc
   character*12 c(n)
   character*12 filename
   character*20 tmp
   open (10,file="D:\150413\140930\140930.txt")
   do j=1,n
   read(10,*) c(j)
  ! write(*,*) c(j)
   end do
   close(10)
   do j=1,n
   write(filename,"(a12)")c(j)
   open(101,file='D:\150413\140930\'//filename//'',status='old',form='formatted')
   
   read(101,*) chen,A
   !write(*,*)chen,A
   do i=1,m
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
   read(101,"(a20)")tmp
  loc = index (tmp, ' ')
  if (tmp(loc+1:loc+3) .ne. ' ') then
  read(tmp(1:loc-1),*) a1(i)
  read (tmp(loc+1:loc+3),"(i3)") a2(i)
  else
  read(tmp(1:loc-1),*) a1(i)
  a2(i)=9999
  end if
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   end do
close (101)
open (102,file='jwd.txt')
  read(102,*) lon,lat
do i=1,m
read(102,*) b1(i),b2(i)
end do
close (102)

open (103, file=filename)
write(103,"(1x,A4,5X,A4,5X,A4,5X,A7)") lon,lat,chen,A
do i=1,m
write(103,"(f6.2,2x,f6.2,3X,a10,i5)")  b1(i),b2(i),a1(i),a2(i)
end do
close(103)
end do

end

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
以上是读取写入程序,两个图片分别为错误提示和数据{:soso_e154:}





错误提示.png
处理后数据及原始数据.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-15 08:21:23 | 显示全部楼层
你这原始数据和你上面贴出来的完全不一样啊,按照截图的数据格式,直接控制字符位就可以了,用不了现在这么麻烦。
至于现有的程序怎么改,if里面的判断的字符串长度增加一些应该就可以了,
if (tmp(loc+1:loc+8) .ne. '        ') then
目前看来已经能基本解决问题了,这种事情你自己多试一试呗。

评分

参与人数 1金钱 +20 贡献 +2 收起 理由
schLltt + 20 + 2

查看全部评分

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

新浪微博达人勋

 楼主| 发表于 2015-4-15 15:43:58 | 显示全部楼层
lqouc 发表于 2015-4-15 08:21
你这原始数据和你上面贴出来的完全不一样啊,按照截图的数据格式,直接控制字符位就可以了,用不了现在这么 ...

非常感谢~~~
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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