根据您的经验,在 Fortran 90 中,将大型数组存储在输出文件中的最佳方式是什么?以前,我一直在尝试将大型数组写入 ASCII 文本文件。例如,我会做这样的事情(感谢页面底部的建议In Fortran 90, what is a good way to write a array to a text file, row-wise?):
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
正如这里的回复所承诺的,这似乎有效,并且确实更快并且文件大小更小。但是,如果我希望以后能够处理存储在 Fortran 二进制文件(例如上面的 output.dat)中的数据并分析其内容,我该怎么办?例如,如果我想在 Microsoft Excel 等程序中打开存储在二进制文件中的数组怎么办?
当我在上一篇文章中提到 matlab 时,回复建议我将二进制文件作为十六进制文件打开,然后从中找出并提取记录。但是,我很担心我会进入深水区,因为我之前没有十六进制侦查方面的经验。当我在 matlab 板(此处: http: //www.mathworks.com/matlabcentral/answers/12639-advice-on-reading-an-unformatted-fortran-binary-file-into-matlab)上询问有关阅读 Fortran 文件的问题时进入matlab,那里的人建议使用Fortran流可能很容易。但是,Fortran 流(即,使用命令ACCESS="STREAM"
中的OPEN
指令)在时间和文件大小上是否可能与我在上面的第一个示例中创建的 ASCII 文本文件相似?
或者,您知道是否有任何其他软件可以自动将 Fortran 二进制文件读入某种人类可读的形式?(或者,你知道关于十六进制侦查或 Fortran 流的任何好的教程吗?)
非常感谢您的宝贵时间。