2012-02-25 8 views
0

私は複数ファイルへのFortran WRITEループ?

!file1, file2,....., file[n] 

OPEN (1,FILE='file1.out',ACCESS='SEQUENTIAL',STATUS='UNKNOWN') 
do ph=1,N6 
do i=1,nx-1 
    A(i)=mu*U(i-1) 
end do 
do j=0,nx 
    U(j)=A(j) 
end do 
    if (mod(ph,Ne)==0) then ! ? 
    WRITE(1,200) nt,U(i) 
    endif 
    200 format(5E12.4) 
end do 

それとも...私は方法がわからない、各ループで新しいファイルを作成したい、私は改行または列を書くことができますか? 私はfortranの初心者です。 ありがとう

+0

少し明確な質問がありますか?コード例は本当に役立ちません。 'm'の配列全体を複数のファイルに書きたいのですか、' m'の各要素を別々のファイルに書きたいのですか?私たちにあなたの問題の背景を教えてください。そうすれば、まともな答えを示唆できるでしょう。 – Chris

+0

いいえ私は私のコードdetaillingを追加します。私は毎回新しいファイルに配列Uを書きたい。このように、私は最後のUをfile1.outに持っているだけです。ループ中に計算された各Uを見たいと思っています。 – supertoto

答えて

2

あなたの既存のコードは、ファイルに最後の書き込みステートメント以上のものを出力する必要があります...シーケンシャルファイルです。つまり、出力がファイルに順番に追加されます。 1つの出力しか見ていない場合は、IF文が出力されている可能性があります。

複数のファイルに出力したい場合は、複数のファイルに出力する最も簡単な方法は、ユニット番号を再利用し、プログラムにファイル名を作成させることです。あなたはファイル/ユニットを閉じてそれを再び開く必要があります。これは、複数のオープンステートメントとユニット番号を持つよりもはるかに簡単です。ファイル数が増えるとすぐに扱いにくくなります。以下は100個未満のファイルを想定したコードの一部です:

do i=1, N 
    write (filename, '("myfile", I2.2, ".txt")') I 
    open (file=filename,unit=16,...) 
    calculations... 
    write (16,'(5E12.4)') nt,U(i) 
    close (16) 
end do 
+0

ありがとう、まさに私が望んでいた! – supertoto

+0

逐次のために、私は理解していなかった。私は別の方法を考えていましたが、もし可能ならば私はkownしません、同じファイルに書くことはできますが、別の列U(i)に書くことはできますか?しかし、あなたの解決策は私にとっては大丈夫です – supertoto

+0

@supertoto write文で 'ADVANCE = 'NO'を使って、同じファイルの異なる列に書くことができます。 –

関連する問題