あなたの経験では、Fortran 90 で大きな配列を出力ファイルに保存する最良の方法は何ですか? 以前は、大きな配列を ASCII テキスト ファイルに書き込もうとしていました。たとえば、次のようにします (ページの下部にある推奨事項のおかげで、Fortran 90 では、行単位で配列をテキスト ファイルに書き込む良い方法は何ですか? ):
PROGRAM testing1
IMPLICIT NONE
INTEGER :: i, j, k
INTEGER, DIMENSION(4,10) :: a
k=1
DO i=1,4
DO j=1,10
a(i,j)=k
k=k+1
END DO
END DO
OPEN(UNIT=12, FILE="output.txt", ACTION="WRITE", STATUS="REPLACE")
DO i=1,4
DO j=1,10
WRITE(12, "(i2,x)", ADVANCE="NO") a(i,j)
END DO
WRITE(12, *)
END DO
CLOSE(UNIT=12)
END PROGRAM testing1
これは機能しますが、 In Fortran 90の一番上の返信で指摘されているように、行単位で配列をテキスト ファイルに書き込む良い方法は何ですか? 、テキスト ファイルへの大きな配列の書き込みは非常に遅く、必要以上に大きなサイズのファイルが作成されます。そこのポスターは、代わりに次のようなものを使用して、フォーマットされていない Fortran バイナリに書き込むことを推奨しています。
PROGRAM testing2
IMPLICIT NONE
INTEGER :: i, j, k
INTEGER, DIMENSION(4,10) :: a
k=1
DO i=1,4
DO j=1,10
a(i,j)=k
k=k+1
END DO
END DO
OPEN(UNIT=13, FILE="output.dat", ACTION="WRITE", STATUS="REPLACE", &
FORM="UNFORMATTED")
WRITE(13) a
CLOSE(UNIT=13)
END PROGRAM testing2
これは機能しているようで、実際にははるかに高速であり、返信here で約束されているように、ファイルサイズが小さくなります。しかし、後で Fortran バイナリ (上記の output.dat など) に保存されたデータを操作してその内容を分析できるようにしたい場合はどうすればよいでしょうか? たとえば、バイナリに格納されている配列を Microsoft Excel などのプログラムで開きたい場合はどうすればよいでしょうか?
以前の投稿でmatlab について言及したとき、返信では、バイナリを 16 進数ファイルとして開き、そこからレコードを見つけて抽出するよう提案されました。しかし、私は 16 進法による調査の経験がないため、深い水域に入ることに不安を感じています。Fortran ファイルの読み取りについて、matlab ボード (ここ: http://www.mathworks.com/matlabcentral/answers/12639-advice-on-reading-an-unformatted-fortran-binary-file-into-matlab ) で質問したときmatlab に入ると、その人は Fortran ストリームを使用するのは簡単かもしれないと提案しました。しかし、Fortran ストリーム (つまり、コマンドでディレクティブを使用ACCESS="STREAM"
) はOPEN
、上記の最初の例で作成した ASCII テキスト ファイルと時間とファイル サイズが似ているでしょうか?
または、Fortran バイナリを人間が読める形式に自動的に読み取ることができるソフトウェアが他にあるかどうか知っていますか? (または、16 進数の調査または Fortran ストリームに関する優れたチュートリアルを知っていますか?)
どうぞよろしくお願いいたします。