爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4335|回复: 13

[求助] 读取数据问题

[复制链接]

新浪微博达人勋

发表于 2014-4-12 18:03:47 | 显示全部楼层 |阅读模式

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

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

x
用fortran读取数据,一共3列,第一列日期,第二列时间(一小时一个),第三列是要用到的数据,但是数据有些是缺测的,缺测的数据没有用任何数值表示,所以如果按照read(1,*) dat(i,j),tim(i,j),ppbv(i,j)  这个顺序读的话,ppbv缺测时就直接读到下一行去了(就是下一行的dat被赋值给了上一行的ppbv),请问这个问题怎么解决呢?程序和数据的一部分如下所示:

program main
implicit none
integer m,n,i,j,t
parameter(m=1,n=1)
real dat(m,n),ppbv(m,n),ave(m),su(m)
character*8 tim(m,n)
open(1,file="f:\gjh\obs\o3.txt")
do j=1,n
do i=1,m
read(1,*) dat(i,j),tim(i,j),ppbv(i,j)
enddo
enddo
close(1)
print*,ppbv(1,1)
do i=1,m
do j=1,n
su(i)=su(i)+ppbv(i,j)
if(ppbv(i,j)/=0) then
t=t+1
endif
end do
ave(i)=su(i)/t
t=0
enddo
open(2,file="f:\gjh\ave.txt")
do i=1,m
write(2,*) dat(1,i),ave(i)
enddo
close(2)
end

数据的一部分:
090701 00:00,
090701 01:00,
090701 02:00,
090701 03:00,
090701 04:00,
090701 05:00,
090701 06:00,
090701 07:00,
090701 08:00,
090701 09:00,   73.81844   
090701 10:00,
090701 11:00,
090701 12:00,
090701 13:00,
090701 14:00,   119.9938   
090701 15:00,   146.0856   
090701 16:00,   127.2168   
090701 17:00,   131.7835   
090701 18:00,   117.2331   
090701 19:00,   126.4951   
090701 20:00,   119.4215   
090701 21:00,   77.94791   
090701 22:00,   124.3685   
090701 23:00,   109.4403   
090702 00:00,   104.9256   
090702 01:00,   100.0042   
090702 02:00,   85.04134   
090702 03:00,   71.45179   
090702 04:00,   63.60510   
090702 05:00,   23.91048   
090702 06:00,
090702 07:00,
090702 08:00,
090702 09:00,
090702 10:00,
090702 11:00,
望大神指点一二。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-12 21:54:46 | 显示全部楼层
本帖最后由 朽木露琪亚 于 2014-4-12 21:56 编辑

读取到character变量str中,用str(m:n)截取日期,时间,变量,你试试
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-12 22:59:16 | 显示全部楼层
朽木露琪亚 发表于 2014-4-12 21:54
读取到character变量str中,用str(m:n)截取日期,时间,变量,你试试

能说详细点吗
这样不会导致数据读到下一行吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-13 21:06:57 | 显示全部楼层
朽木露琪亚 发表于 2014-4-12 21:54
读取到character变量str中,用str(m:n)截取日期,时间,变量,你试试

而且要读的第三列数据要用于计算,所以不可能读成字符串格式。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-13 21:13:26 | 显示全部楼层
我的fortran也不怎么地,但是我觉得你可以用excel预处理一下啊,把缺测的赋值成999之类的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-13 22:06:03 | 显示全部楼层
如果是我遇到这类问题,我也是会用river说的方法处理。若有更好的方法请分享。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-14 13:55:47 | 显示全部楼层
river 发表于 2014-4-13 21:13
我的fortran也不怎么地,但是我觉得你可以用excel预处理一下啊,把缺测的赋值成999之类的

谢了哈,这样的方法也挺好
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-14 13:56:10 | 显示全部楼层
四叶草 发表于 2014-4-13 22:06
如果是我遇到这类问题,我也是会用river说的方法处理。若有更好的方法请分享。

恩恩,我来试试这个。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-15 14:05:34 | 显示全部楼层
q863510557 发表于 2014-4-13 21:06
而且要读的第三列数据要用于计算,所以不可能读成字符串格式。

你可以先一行一行的读到一个字符串数组里,然后判断每行字符串的长度,只要哪行长度小于14的就在后面加个9999什么的,然后再把这个字符串数组写到一个新的文件里比如data.txt,最后像你之前那个方法那样读取data.txt
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-16 10:03:57 | 显示全部楼层
朽木露琪亚 发表于 2014-4-15 14:05
你可以先一行一行的读到一个字符串数组里,然后判断每行字符串的长度,只要哪行长度小于14的就在后面加个 ...

恩恩  我来试试
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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