Я пытался преобразовать некоторые проиндексированные файлы, созданные в OpenVMS, в простые плоские последовательные файлы для использования в Windows или Linux. Каждый проиндексированный файл содержит x структур POD (2594 байта).
Я преобразовал файлы с помощью простой программы, такой как эта:
PROGRAM MAKE_FLAT
BYTE byte_array(2594)
PARAMETER FILE_IN = 1
PARAMETER FILE_OUT = 2
OPEN(UNIT=FILE_IN, fmt='UNFORMATTED',
1 FILE='input.data',
1 ORGANIZATION='INDEXED',
1 ACCESS='SEQUENTIAL',
1 KEY=(1:8:INTEGER), RECL=649)
OPEN(UNIT=FILE_OUT, fmt='UNFORMATTED',
1 FILE='output.data')
DO WHILE (.TRUE.)
READ(FILE_IN, END=999) byte_array
WRITE(FILE_OUT) byte_array
END DO
999 CONTINUE
CLOSE(FILE_IN)
CLOSE(FILE_OUT)
END
Если в файле 1000 записей, и я должен ожидать файл размером ~ 1000 * 2594 байта, но вместо этого он показывает 1000 * 2044 байта, используя:
DIR/FULL output.data
Почему программа пишет меньше байтов на запись? Я сделал что-то не так?
EDIT: Использование встроенной утилиты OpenVMS дает мне ожидаемый плоский файл.
ANAL/RMS/FDL FILE.FDL input.data
EDIT/FDL/ANALY=FILE.FDL FILE.FDL
После изменения организации с «ИНДЕКСИРОВАННЫЙ» на «ПОСЛЕДОВАТЕЛЬНЫЙ» и непрерывного на «ДА» выполнение следующей команды дает мне плоский файл правильного размера (включая заполнение для каждой записи).
CONVERT/FDL=FILE.FDL input.data output.data
Inquire
. См. stackoverflow.com/questions/32686720/ - person Vladimir F   schedule 06.03.2017