По вашему опыту, в 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
Это работает, но, как указано в самом верхнем ответе на В Fortran 90, каков хороший способ записи массива в текстовый файл построчно? , запись больших массивов в текстовые файлы очень медленно и создает файлы, которые несколько больше по размеру, чем необходимо. Вместо этого автор рекомендовал записывать в неформатированный двоичный файл на языке Фортран, используя что-то вроде:
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
Кажется, это работает, и действительно намного быстрее и приводит к меньшим размерам файлов, как обещано в ответе здесь . Однако что мне делать, если я хотел бы иметь возможность позже работать с данными, хранящимися в двоичном коде Фортрана (например, output.dat выше), и анализировать их содержимое? Например, что если я хочу открыть массив, хранящийся в двоичном файле, в такой программе, как Microsoft Excel?
Когда я упоминал matlab в моем предыдущем посте , в ответе предлагалось открыть двоичный файл в виде шестнадцатеричного файла, выяснить и извлечь из него записи. Но я нервничаю из-за того, что попадаю в глубокую воду, так как у меня нет предыдущего опыта шестнадцатеричного слежения. Когда я спросил на доске Matlab (здесь: http://www.mathworks.com/matlabcentral/answers/12639-advice-on-reading-an-unformatted-fortran-binary-file-into-matlab) о чтении файлов Фортрана в Matlab, один человек там предположил, что использование потока Фортрана может быть простым. Но это поток Фортрана (то есть использование директивы ACCESS="STREAM"
в OPEN
команда), вероятно, будет похож по времени и размеру файла на текстовый файл ASCII, который я создал в моем первом примере выше?
Или вы знаете, существует ли какое-либо другое программное обеспечение, которое может автоматически считывать двоичные файлы Фортрана в какую-то удобочитаемую форму? (Или вы знаете какие-нибудь хорошие учебники по шестнадцатеричному обучению или потоку Фортрана?)
Большое спасибо за ваше время.