2015-04-21 5 views
0

ребята. Я пытаюсь прочитать научный файл данных, хранящийся в коде VAX FORTRAN. Данные были сохранены в структуре, описания файлов и кода которой приведены ниже. Я googled, что FORTRAN 77 мог прочитать файл, но мой часто используемый язык не FORTRAN. Так может кто-нибудь сказать мне, как читать данные в FORTRAN или C/IDL/etc. переменные? Например, N единиц структуры хранятся в файле «pxm.mos», как я могу прочитать данные в моих переменных? Спасибо большое! Вот эти описания.Как читать неформатированный файл данных, сохраненный с помощью кода VAX FORTRAN с «map» и «union»

c  FILE name is "pxm.mos" 
c  FILE AND RECORD STRUCTURE 
c  The files were created with form='unformatted', organization='sequential', 
c  access='sequential', recordtype='fixed', recordsize=512. 
c  The following VAX FORTRAN code specifies the record structure: 

      structure /PXMstruc/ 
       union 
       map 
        integer*4 buffer(512) 
       end map 
       map 
        integer*4 mod16   
        integer*4 mod60   
        integer*4 line    
        integer*4 sct 
        integer*4 mfdsc   
        integer*4 spare(3) 
        real*4 datamin   
        real*4 datamax   
        real*4 data(0:427) 
       end map 
       end union 
      end structure 

      record /PXMstruc/ in 
+0

'structure' - расширение VAX fortran. Сначала вы можете посмотреть, поддерживает ли ваш текущий компилятор. – agentp

ответ

2

Это не сложно. Вы можете думать о структуре, подобной структуре C, с объединениями. Каждая запись составляет 2048 байт (512 слов «longwords» в терминах VAX) и состоит из пяти 32-битных ints, массива из 3-х int для заполнения, двух 32-битных поплавков и затем массива из 428 поплавков. Учитывая, что файл имеет фиксированную длину, метаданных не нужно беспокоиться. Объединение с «буфером» можно игнорировать.

Я буду больше беспокоиться о том, как файл попал на ваш компьютер, при условии, что он возник из системы VMS. Вы хотите проверить, что размер файла является точным кратным 2048 байт. Скорее всего, он передается просто отлично, поэтому объявите структуру с правильным расположением и прочитайте ее, запишите по записи.

+0

Примечание для неформатированного последовательного доступа запись начинается с (возможно) 32-битного целого числа, указывающего размер записи. Размер записи повторяется в конце записи, поэтому размер файла должен быть кратным 2048 + 8. – agentp

+0

Также будьте осторожны, вам может потребоваться решить проблемы с байтом. – agentp

+1

Размер записи не будет из-за RECORDTYPE = 'FIXED'. VMS является малоподвижным, поэтому, действительно, если вы находитесь в системе с большим энтузиазмом, вам нужно будет поменять байты. –