2011-05-27 37 views
1

親愛的所有人,我正在編寫一個代碼,將輸出寫入多個文件,名爲1.dat,2.dat,.....這是我的代碼,但它提供了一些不尋常的輸出。你能告訴我我的代碼有什麼問題嗎?基本上我無法獲得正確的語法來打開多個文件,寫入它們並在下一個文件打開之前關閉。謝謝。 我的代碼在Fortran中寫入多個輸出文件

implicit double precision (a-h,o-z),integer(i-n) 
dimension b(3300,78805),bb(78805) 
character*70,fn 
character*80,fnw 
nf = 3600  ! NUMBER OF FILES 
nj = 360  ! Number of rows in file. 
do j = 1, nj 
    bb(j) = 0.0 
end do 
c-------!Body program----------------------------------------------- 
iout = 0 ! Output Files upto "ns" no. 
DO i= 1,nf ! LOOP FOR THE NUMBER OF FILES 
    if(mod(i,180).eq.0.0) then 
     open(unit = iout, file = 'formatted') 
     x = 0.0 
     do j = 1, nj 
      bb(j) = sin(x) 
      write(iout,11) int(x),bb(j) 
      x = x + 1.0 
     end do 
     close(iout) 
     iout = iout + 1 
    end if 
END DO 
11 format(i0,'.dat') 
END 
+0

什麼是模數應該在這裏做? – talonmies 2011-05-27 12:57:02

回答

3

所以有一些事情不是你的代碼不清楚,但我覺得這裏最相關的位是要在open語句file =指定文件名,不是格式化,並且使用iout循環單元是有問題的,因爲您最終會爲stdin和stdout命中系統定義的單位。此外,使用該格式的行,看起來您已準備好創建文件名,但您永遠不會使用它。

我不確定你在哪裏;與模測試等,但下面是一個精簡版的上面,它只是在一個循環中創建文件:

program manyfiles 
    implicit none 
    character(len=70) :: fn 
    integer, parameter :: numfiles=40 
    integer, parameter :: outunit=44 

    integer :: filenum, j 

    do filenum=1,numfiles 
     ! build filename -- i.dat 
     write(fn,fmt='(i0,a)') filenum, '.dat' 

     ! open it with a fixed unit number 
     open(unit=outunit,file=fn, form='formatted') 

     ! write something 
     write(outunit, *) filenum 

     ! close it 
     close(outunit) 
    enddo 
end program manyfiles 
+0

偉大的喬納森。我可以實現這個想法來解決我的問題。非常感謝。 – ndphysics 2011-06-02 14:14:32