爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4056|回复: 9

[求助] 【已解决】Fortran读取A(文本文件)文件中间某些行出错/附:感谢版主lqouc

[复制链接]

新浪微博达人勋

发表于 2013-10-20 22:39:18 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 shirly 于 2013-10-21 19:58 编辑

读取A文件,提取其中的某一部分,编译没错,但是运行总是有错,在此将我的程序和错误贴出,希望可以得到前辈的指点~

program Pro_dat
implicit none
integer,parameter:: h=12!读取KB时要将l改成3,因为深层地温有三层
integer ih,id,il,in,d,j,n,it,day(12),e,z,status,lin(12)  !!!!!  lin(i)代表第i个月的天数

character(len=80)::filename,filename1
character month(12)*1
character(len=3)::start
data month/'J','F','M','A','Y','U','L','G','S','O','N','D'/

Character, allocatable,dimension(:,:):: fx*4

do e=54,99 !1954到1999年的数据
do z=1,12

!!!打开文件
    write(filename,'("E:\dat\A\-2004\","A052681.'//month(z)//'",i2.2)') e    !!!打开文件
    write(filename1,'("E:\dat\A\wuwei\T\","A52681-19",i2.2,i2.2,".txt")')e,z
    open(1,file=trim(filename),form='formatted',status='old')
    open(2,file=trim(filename1),form='formatted',status='unknown')


!!!打开的txt文件有多少行
        do while(.true.)
           read(1,"(a3)", iostat = status,end=10) start
          if(status<0)exit
          n=n+1
       end do
10         print*, n,status

stop

!!!开始读文件,判断到T0时读取数据,T0结束停止读取
start='000'
  do j=1,n
   if(start.ne.'T')then  
   read(1,'(a3)') start
   elseif(start.eq.'T')then
            in=0
            do while(.true.)
            in=in+1
            read(1,'(6(a4,1x))',err=20) fx(1:(h/2),in)
            end do
   lin(z)=in
   
endif
  enddo

20  print*, 'I0'
deallocate(fx)
end do
end do

end


stop之前运行不出错
之后就出错,出错信息如图::

出错信息

出错信息

另外我上传了一个A文件样本,发现下载此数据需要金钱,所以先贴一部分数据格式~
写得比较长,但是主要问题就是截取A052679.J54中的T0数据,并知道T0数据的行数

52679 380510255 15250 15250 1954 01
P=
T0
-125 -150 -044 -090 -011 -156
-068 -076 -020 -066 -015 -130
-104 -127 0075 -013 0085 -141
-074 -102 -014 -043 -002 -106
-100 -097 0118 -038 0147 -115
-083 -104 -028 -041 0006 -112
-088 -112 -018 -050 -008 -123
-084 -092 -002 -041 0022 -116
-088 -125 -026 -054 -018 -130
-102 -115 -066 -069 -042 -120
-110 -125 -044 -060 -035 -127
-072 -115 -028 -066 -023 -118
-114 -141 -007 -064 0004 -143
-126 -116 -037 -050 -020 -137
-080 -109 0028 -056 0042 -124
-104 -130 0054 -050 0068 -140
-112 -118 -015 -062 -013 -133
-116 -146 0010 -068 0018 -156
-080 -090 -046 -098 -040 -098
-100 -137 -065 -094 -057 -148
-120 -111 -077 -092 -060 -134
-116 -140 -115 -119 -087 -142
-126 -224 -146 -146 -112 -228
-183 -231 -140 -192 -126 -240
-222 -240 -124 -166 -108 -245
-172 -196 -084 -113 -076 -221
-158 -184 -053 -090 -042 -195
-162 -168 0004 -096 0022 -191
-162 -136 -001 -082 0021 -178
-104 -156 0000 -071 0032 -160
-127 -131 0034 -045 0050 -145=
I=
E=
U2
87 87 60 77
……
……


A052681.J54

8.28 KB, 下载次数: 5, 下载积分: 金钱 -5

A文件的1954年1月

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

新浪微博达人勋

 楼主| 发表于 2013-10-21 19:55:55 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-10-21 15:50:46 | 显示全部楼层
lqouc 发表于 2013-10-21 09:00
稍微改了一下你的程序,你自己揣摩下,不行再q我,你写的那个是有问题的,第一个循环把文件直接读完了,所以 ...

都不知道怎么感谢谦哥了~!!!!你好厉害~!!
按谦哥的试了,可以出来等做完这部分就分享完整程序,感谢谦哥~!!{:soso_e160:}

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

新浪微博达人勋

发表于 2013-10-21 13:02:07 | 显示全部楼层
楼主问题解决了吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-10-21 09:02:43 | 显示全部楼层
我查了一下说与大端与小端有关,说与左右读取有关,不知道什么意思呀
写出了stop之前读出的start,发现只显示最后一位~
这是两个大端与小端介绍的网址,贴出来,希望大侠能指导指导~感谢啊
http://wenku.baidu.com/view/2860b62eed630b1c59eeb58a.html
http://wenku.baidu.com/view/12fb07350b4c2e3f572763ed.html
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-21 09:00:04 | 显示全部楼层

回帖奖励 +1 金钱

稍微改了一下你的程序,你自己揣摩下,不行再q我,你写的那个是有问题的,第一个循环把文件直接读完了,所以会read end of file吧。至于动态数组什么的你可以再改回来,我是为了测你的数据方便才写成这样。
program Pro_dat
implicit none
integer,parameter:: h=12
integer i,status,j
character(len=2)::start
Character(len=4):: fx(h/2,1000)

open(1,file='A052681.J54')
do i=1,1000
read(1,*)start
if(start.eq.'T0') then
goto 10
end if
end do

10 print*,start
j=0
do i=1,1000
read(1,'(6(a4,1x))') fx(1:(h/2),i)
if(fx(1,i).eq.'I0') then
goto 20
end if
j=j+1
end do
20  print*, 'I0',j !输出的j是t0的行数,t0都存放在fx里面

close(1)
end
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-22 14:12:46 | 显示全部楼层
高手如云啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-22 13:51:11 | 显示全部楼层
shirly 发表于 2013-10-21 19:55
在lqouc版主的帮助下解决啦~~

那就好。版主很牛叉呀~!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-12-19 20:30:12 | 显示全部楼层
谢谢楼主分享~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-1-2 00:27:09 | 显示全部楼层
借鉴一下
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

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

本版积分规则

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

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

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