Чтение файла SEG-Y с EBCDIC и содержимым двоичных данных в Fortran - PullRequest
0 голосов
/ 08 июня 2018

Я читаю файл SEG-Y (используемый в геофизике для хранения данных), который имеет 2 раздела заголовка, первый - 3200 байт, содержащий информацию в формате EBCDIC, а второй - в двоичном форматеи имеет длину 400 байт.Далее следуют данные, где размер данных определяется числом, определенным в двоичном заголовке, определенном в данных местоположениях байтов 3217-3218.

Мне удалось прочитать заголовок EBCDIC (байты 1-3200), используя простойКоманда open в Fortran 90 без доступа или определения формата, но я не могу идти дальше, чтобы прочитать конкретные байты в двоичном заголовке (3201-3204, 3205-3206, ... и т. д.), который содержит важную информацию, необходимую дляпрочитайте остальные двоичные данные потом.

Как правильно определить доступ / форматирование для файла, чтобы успешно прочитать все сразу?Поддерживает ли Fortran изменение доступа к файлу / формата / ... в коде?Если это невозможно, как я могу пропустить первые 3200 байтов и перейти к двоичному разделу (байты 3201-3600), чтобы прочитать нужные мне данные?

1 Ответ

0 голосов
/ 08 июня 2018

Если вы откроете файл данных с помощью access="stream", вы можете прочитать файл побайтно из любой позиции.

character :: byte   ! integer(int8) might be a better type

open(11, file="filename",access="stream",form="unformatted",action="read",status="old")

!be careful, the positions are numbered from 1, not from 0
read(11, pos=3200) byte

Вы также можете прочитать другие типы данных, если они хранятся там всовместимый двоичный формат

integer :: i
...
read(11, pos=...) i

На машине с прямым порядком байтов вам может потребоваться преобразовать их порядковый номер.

...