Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 如何读取通过VAX FORTRAN代码保存的未格式化数据文件;“地图”;及;“工会”;_Dictionary_Fortran_Union_Vax - Fatal编程技术网

Dictionary 如何读取通过VAX FORTRAN代码保存的未格式化数据文件;“地图”;及;“工会”;

Dictionary 如何读取通过VAX FORTRAN代码保存的未格式化数据文件;“地图”;及;“工会”;,dictionary,fortran,union,vax,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 f

伙计们。我正在尝试读取由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 

这并不难。你可以把结构想象成C结构,带有联合。每条记录为2048字节(VAX术语中为512个“长字”),由五个32位整数、一个用于填充的3位整数数组、两个32位浮点以及一个428位浮点数组组成。考虑到文件的长度是固定的,因此不需要担心元数据。带有“缓冲区”的并集可以忽略


我更关心的是文件是如何进入您的计算机的,假设它起源于VMS系统。您需要验证文件大小是否为2048字节的精确倍数。很可能它传输得很好,所以声明一个布局正确的结构,并逐条记录地读取它。

structure
是VAX fortran的扩展。您可能首先要查看当前编译器是否支持它。注意:对于无格式顺序访问,记录将以(可能)32位整数开头,指示记录大小。记录大小在记录末尾重复,因此文件大小应为2048+8的倍数。另外,请注意,您可能需要处理字节排序问题。由于RECORDTYPE='FIXED',因此不会有记录大小。虚拟机是小端机,因此如果您使用的是大端机系统,则确实需要进行字节交换。作为记录,现代英特尔fortran可以很好地处理VAX
结构和非标准的
open()
关键字(当然Steve是对的,没有添加记录长度标题)值将按结构中声明的顺序存储。在这里,mod16不是一个“变量”,它是结构的一个成员。整个结构作为单个实体编写。我不太明白逐字节读取的意义——大多数语言可以在一次操作中读取一个结构。如果您告诉我们您将使用哪种语言以及计算机和操作系统,我们可以提供更好的建议。