Я никогда не использовал последовательный доступ с неформатированным выводом по этой точной причине.Однако это зависит от приложения, и иногда удобно иметь индикатор длины записи (особенно для неструктурированных данных).Как предложил steabert в Глядя на двоичный вывод из fortran на gnuplot , вы можете избежать этого, используя ключевое слово аргумент ACCESS = 'DIRECT'
, в этом случае вам нужно указать длину записи.Этот метод удобен для эффективного хранения больших многомерных структурированных данных (постоянная длина записи).В следующем примере записывается неотформатированный файл, размер которого равен размеру массива:
REAL(KIND=4),DIMENSION(10) :: a = 3.141
INTEGER :: reclen
INQUIRE(iolength=reclen)a
OPEN(UNIT=10,FILE='direct.out',FORM='UNFORMATTED',&
ACCESS='DIRECT',RECL=reclen)
WRITE(UNIT=10,REC=1)a
CLOSE(UNIT=10)
END
Обратите внимание, что это не идеальный подход в смысле переносимости.В неотформатированном файле, написанном с прямым доступом, нет информации о размере каждого элемента.Текстовый файл readme, описывающий размер данных, отлично справляется со мной, и я предпочитаю этот метод вместо заполнения в последовательном режиме.