Fortran Coder

标题: 计算结果只有一个,而应该有多个? [打印本页]

作者: max533    时间: 2014-10-29 19:24
标题: 计算结果只有一个,而应该有多个?
想要運用list.txt和list2.txt加上do while迴圈進行檔案名稱的讀取
再讀取檔案內的數值進行公式運算
但發現運行出來的結果只有一行,真心不知道到底錯在哪?
明明運行出來的結果應該會有很多筆資料。

先在這邊跟幫忙我、集思廣益解決問題的大家說聲謝謝。

作業系統:windows7
complier:Silverfrost FTN95

程式碼如下:
[Fortran] 纯文本查看 复制代码
program baseline
implicit none

integer :: stat,k,stat2,m,stat3,stat4
character :: filename_1*13,gps1*4,filename_2*13,gps2*4,filename_new*13
real*8 :: x1,y1,z1,x2,y2,z2,dis,time_all_1,time_all_2

  open (11,file='list.txt')
  close (11,status='delete')
  open (22,file='list2.txt')
  close (22,status='delete')
  call system ('for %f in (ts_*_b.dat) do echo %f >> list.txt')
  call system ('for %f in (ts_*_b.dat) do echo %f >> list2.txt')
  open (11,file='list.txt')
  open (22,file='list2.txt')
  
  stat=0
  k=0
  do while (stat==0)
    read (11,'(a13)',iostat=stat) filename_1
    read (filename_1(4:7),'(a4)') gps1
    if (stat/=0) exit
    k=k+1  

    stat2=0
    m=0
    do while (stat2==0)
      m=m+1
      read (22,'(a13)',iostat=stat2) filename_2
      read (filename_2(4:7),'(a4)') gps2
      if (stat2/=0) exit
      if (gps1 /= gps2 .and. k < m) then
        filename_new = gps1//'_'//gps2//'.dat'
        open (33,file=filename_1)
        open (44,file=filename_2)
        open (55,file=filename_new)

        stat3=0
        do while(stat3==0)
          read (33,50,iostat=stat3) time_all_1,x1,y1,z1
50        format (f10.5,2x,f13.4,11x,f12.4,11x,f12.4)  
          if (stat3/=0) exit

          stat4=0
          do while (stat4==0)
            read (44,100,iostat=stat4) time_all_2,x2,y2,z2
100         format (f10.5,2x,f13.4,11x,f12.4,11x,f12.4)
            if (stat4/=0) exit           
            if ( DABS (time_all_1 - time_all_2 ) < 0.00001D0 ) then
              dis = DSQRT ( (x1*1D0-x2*1D0)**2+(y1*1D0-y2*1D0)**2+(z1*1D0-z2*1D0)**2 )
              write (55,'(f10.5,3x,f12.7)') time_all_1,dis
            end if
            exit
          end do
          rewind(44)
        end do   
      end if
      close(33)
      close(44)
      close(55)
    end do
    rewind(22)      
  end do
  close(11)
  close(22)
end program

以下為附檔




baseline.rar

19.86 KB, 下载次数: 3


作者: 百事可乐    时间: 2014-10-30 09:35
[Fortran] 纯文本查看 复制代码
if ( DABS (time_all_1 - time_all_2 ) < 0.00001D0 ) then 
  dis = DSQRT ( (x1*1D0-x2*1D0)**2+(y1*1D0-y2*1D0)**2+(z1*1D0-z2*1D0)**2 )
  write (55,'(f10.5,3x,f12.7)') time_all_1,dis
end if
exit  

这个 exit  放错地方了吧?放到 endif  前面去吧。楼主很粗心哦~~

作者: max533    时间: 2014-10-30 10:48
百事可乐 发表于 2014-10-30 09:35
[mw_shl_code=fortran,true]if ( DABS (time_all_1 - time_all_2 ) < 0.00001D0 ) then
  dis = DSQRT ( ( ...

感謝你,著實幫我解決一個粗心的問題。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2