如何通过带有“map”和“union”的VAX FORTRAN代码读取未格式化的数据文件

时间:2015-04-21 14:59:00

标签: dictionary fortran union vax

人。我试图读取由VAX FORTRAN代码存储的科学基准文件。数据存储在结构中,其文件和代码描述如下。我用谷歌搜索FORTRAN 77可能会读取该文件,但我常用的语言不是FORTRAN。那么有人可以告诉我如何将数据读入FORTRAN或C / IDL /等。变量?例如,结构的N个单元存储在文件“pxm.mos”中,如何将数据读入我的变量? 非常感谢! 以下是说明。

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 

1 个答案:

答案 0 :(得分:2)

这并不难。您可以将结构视为C结构,具有联合。每条记录为2048字节(VAX术语为512“longwords”),由5个32位整数组成,3个整数用于填充,2个32位浮点数,然后是428个浮点数组。鉴于文件是固定长度的,没有元数据需要担心。与“缓冲”的联合可以忽略。

我会更关心文件如何进入您的计算机,假设它来自VMS系统。您需要验证文件大小是否为2048字节的整数倍。很可能它转移得很好,所以声明一个具有正确布局的结构并读入它,按记录记录。