爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5514|回复: 14

[求助] 逐分钟资料用fortran求日平均

[复制链接]

新浪微博达人勋

发表于 2013-11-2 13:29:33 | 显示全部楼层 |阅读模式

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

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

x
    用逐分钟资料求日平均,程序如下,运行结果显示end-of-fileduring read,unit1,file d:\gbno2(图一),资料打开为图二(第一列为日期,第二列为时间,第三列为观测值,四五两列是不需要的)。
    编译过程没有错误,资料当中有缺测值,缺测值都都是0.0000000E+00这种形式,是不是缺测值的读取有问题,另外计算平均时对缺测值的处理是正确的吗?
程序如下:
program main
implicit none
integer n,nn
integer j,jj,i,d
integer k,sum
parameter(n=1578240,nn=1096)
real  cs1(n),cs2(n),cs3(n),cs4(n)
real  dat(nn),ave(nn)
character cha(n)
open(1,file='d:\gbno2.txt',status='old',form='formatted')
do j=1,n
read(1,"(I6)") cs1(j)
read(1,"(A5)") cha(j)
read(1,"(f8.5)") cs2(j)
read(1,"(f8.5)") cs3(j)
read(1,"(f8.5)") cs4(j)
end do
close(1)
i=1
d=0
sum=1440
k=0
do j=1,n
d=d+cs2(j)
k=k+1
if(cs2(j)==0.0) then
sum=sum-1
end if
if(k==1440) then
ave(i)=d/sum
dat(i)=cs1(j)
i=i+1
d=0
k=0
sum=1440
endif
end do
open(2,file='d/ave.txt')
do jj=1,nn
write(2) dat(jj)
write(2) ave(jj)
end do
close(2)
end


图一

图一

图二

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

新浪微博达人勋

发表于 2013-11-2 14:01:11 | 显示全部楼层

回帖奖励 +1 金钱

你的数据行数不对,没有你认为的那么多行,在read里面加一个iostat吧。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-11-2 14:05:04 | 显示全部楼层
刚没仔细看你的程序,出错主要是你的read有问题,吧read都合并在一起写,一个记录必须用一个read。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-11-2 14:05:11 | 显示全部楼层
好像找到问题了,这五个read读的都是日期,根本就没往后面读。。。怎么解决呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-11-2 14:05:36 | 显示全部楼层
我真衰啊、、、
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-11-2 14:29:43 | 显示全部楼层

就是说一行只能有一个read吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-11-2 14:30:05 | 显示全部楼层
lqouc 发表于 2013-11-2 14:01
你的数据行数不对,没有你认为的那么多行,在read里面加一个iostat吧。

iostat是什么呢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-11-2 14:39:21 | 显示全部楼层
lqouc 发表于 2013-11-2 14:05
刚没仔细看你的程序,出错主要是你的read有问题,吧read都合并在一起写,一个记录必须用一个read。

版主好人做到底~~~给改改程序~~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-11-2 15:01:54 | 显示全部楼层
lqouc 发表于 2013-11-2 14:05
刚没仔细看你的程序,出错主要是你的read有问题,吧read都合并在一起写,一个记录必须用一个read。

刚才呢个问题解决了,现在有个问题就是unformatted I/0 to unit open for formatted transfers  unit 2  , file d:\ave.txt。(如图)
以下是现在的程序:
program main
implicit none
integer n,nn
integer j,jj,i,d
integer k,sum
parameter(n=1578240,nn=1096)
real  cs1(n),cs2(n),cs3(n),cs4(n)
real  dat(nn),ave(nn)
character cha(n),hh
open(1,file='d:\gbno2.txt',status='old',form='formatted')
do j=1,n
read(1,"(I7,A10,f8.5,A8,f8.5,A8,f8.5)") cs1(j),cha(j),cs2(j),hh,cs3(j),hh,cs4(j)
end do
close(1)
i=1
d=0
sum=1441
k=0
do j=1,n
d=d+cs2(j)
k=k+1
if(cs2(j)==0.0) then
sum=sum-1
end if
if(k==1440) then

dat(i)=cs1(j)
i=i+1
d=0
k=0
sum=1441
endif
end do
open(2,file='d:\ave.txt',status='new')
do jj=1,nn
write(2) dat(jj)
write(2) ave(jj)
end do
close(2)
end


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

新浪微博达人勋

发表于 2013-11-2 15:24:36 | 显示全部楼层
q863510557 发表于 2013-11-2 15:01
刚才呢个问题解决了,现在有个问题就是unformatted I/0 to unit open for formatted transfers  unit 2   ...

write(2,*)
有格式的要声明输出格式,即使是默认格式。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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