Я ненавижу это делать, но чувствую, что если бы я надеялся найти ответы в этом посте, путь вперед не был бы ясен. Итак, вот путь вперед.
Короткая версия
В Fortran 77/90, чтобы открыть стандартный двоичный файл Fortran, вы можете написать:
OPEN (5, FILE="myFile.txt")
Но чтобы открыть плоский двоичный файл не-Фортрана, вам нужно написать что-то вроде этого:
OPEN(5, file="myFile.txt", form='unformatted', access='direct', recl=1)
Это различие заключается в том, что двоичные файлы в стиле Фортрана имеют 4-байтовый заголовок и нижний колонтитул вокруг каждой «записи» в файле. Эти колонтитулы описывают размер данных, содержащихся в записи. (В наиболее распространенном случае каждый двоичный файл, который вы встречаете, будет иметь только одну запись.)
Длинная версия
Фортран предполагает множество стандартных аргументов open
. Фактически, наш оригинальный пример может быть записан в следующей подробной форме, чтобы показать все значения по умолчанию, которые были приняты.
OPEN (5, FILE="myFile.txt")
OPEN (5, FILE="myFile.txt", FORM="FORMATTED",
+ ACCESS="SEQUENTIAL", STATUS="UNKNOWN")
Давайте посмотрим на каждый аргумент:
FORM определяет, состоит ли файл из текста (form='formatted'
) или двоичных данных (form='unformatted'
).
ACCESS определяет, считываете ли вы данные из файла в порядке (access='sequential'
) или в любом порядке (access='direct'
).
RECL определяет количество байтов, которые входят в каждую запись. Например, recl=1
просто говорит, что длина записи составляет 1 байт каждая; возможно, они являются 1-байтовыми целыми числами.
STATUS определяет, существует ли файл уже. Аргумент STATUS="UNKNOWN"
означает, что файл может еще не существовать, но если этого не произойдет, он будет создан. Если вы хотите защитить от возможности записи поверх старого файла, используйте: STATUS="OLD"
. Точно так же, если вы знаете, что файл еще не существует, вы можете использовать: STATUS="NEW"
.
Для получения дополнительной информации:
Эти открытые операторы также влияют на последующие операторы чтения / записи / закрытия. В моем исходном сообщении мне нужно было знать, что если вы открываете файл прямого доступа, вы должны записать его в файл прямого доступа. (То есть заголовки / нижние колонтитулы Fortran не будут включены в ваш двоичный файл.) Однако по умолчанию функциональность Fortran заключается в создании файлов с последовательным доступом с включенными верхними и нижними колонтитулами Fortran.
Для получения дополнительной информации о open
утверждениях в Fortran 77/90, есть хорошие ресурсы онлайн:
Приятная страница от Линь Джинсена из Университета Бишопа (большое спасибо).
Чуть больше официальной документации от IBM для ее компиляторов.