爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3606|回复: 7

[求助] [已解决]读取多个格式相同的文件数据 出现错误

[复制链接]

新浪微博达人勋

发表于 2012-11-11 19:24:13 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 风花树0214 于 2012-11-11 20:04 编辑

现有fort.100,fort.101一直到fort.164共65个文件,想把每一个文件中的特定57971行的数据读取出来,全部放到57971.txt这个文件当中去。程序编译成功,可是总只能找第一个fort.100文件中的数据。不知道为什么do n=100,164这个循环没有生效。
希望有大侠指点一下,感激不尽。代码贴出如下:
program readdata
    implicit none
    character (len=3)   :: order        ! fort文件的后缀3个数字
    character (len=150) :: buffer
    integer             :: n             !连续读取文件循环的数字
    integer count
    integer error
    open  (unit=11,file='57971.txt',status='replace')
    count=0
    do n=100,164  
        write (order,'(I3)') n          !将整型变量转换为字符型变量
        open (unit=10,file='fort.'//trim(adjustl(order)),status='old') !打开文件逐行读取数据
            do while(.true.)
            read (10,"(A150)",iostat=error) buffer      !读取一整行的数据到buffer里
            count=count+1
             if (count==57971) then
            
              write (11,"(A)") trim(adjustl(buffer))
              end if
            if (error/=0) exit
            
            end do
            
       close (10)                                             
            
        
    end do
   
    close (11)
   
   
    stop

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

新浪微博达人勋

 成长值: 0
发表于 2012-11-11 19:49:04 | 显示全部楼层
循环了,但是由于count=0在n循环外面,所有n>=101时,count不能及时归零,因此count越来越大,导致以后的if判断为真,没有输出
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-11 19:49:57 | 显示全部楼层
噢。晓得了。自己刚才想出来了,是因为n的初始赋值有问题,应该把n=0赋值放到第一个do循环里面。哈哈。问题解决了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-11 19:51:22 | 显示全部楼层

嗯嗯。非常感谢版主的回复。自己刚回复完,刷新就见到您的帖子了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-11-11 19:56:19 | 显示全部楼层
风花树0214 发表于 2012-11-11 19:51
嗯嗯。非常感谢版主的回复。自己刚回复完,刷新就见到您的帖子了。

不客气,呵呵,将帖子修改一下,增加【已解决】吧,这样大家就没有必要再来回复了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-11 20:03:10 | 显示全部楼层
言深深 发表于 2012-11-11 19:56
不客气,呵呵,将帖子修改一下,增加【已解决】吧,这样大家就没有必要再来回复了

嗯。好的。谢谢了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-11 20:16:42 | 显示全部楼层
我觉得你应该先数一数每个文件多少行,如果大于57971再重新打开文件读取!   
do while(.true.)
             read (10,"(A150)",iostat=error) buffer      !读取一整行的数据到buffer里
            count=count+1
      if (error/=0) exit        
   enddo
          if (count>=57971)then
            rewind(10)
      do  i=1,57970
        read(10,*)
       enddo
      read(10,,"(A150)") buffer
     write(11)BUFFER     
      ......
     .......

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

新浪微博达人勋

 楼主| 发表于 2012-11-12 18:45:24 | 显示全部楼层
youwei 发表于 2012-11-11 20:16
我觉得你应该先数一数每个文件多少行,如果大于57971再重新打开文件读取!   
do while(.true.)
        ...

嗯。这个确定是大于57971的。每一个文件都是10万行。谢谢你的回复 。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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