Dictionary 如何读取通过VAX FORTRAN代码保存的未格式化数据文件;“地图”;及;“工会”;
伙计们。我正在尝试读取由VAX FORTRAN代码存储的科学数据文件。数据存储在结构中,其文件和代码描述如下。我用谷歌搜索FORTRAN 77可能会读取该文件,但我常用的语言不是FORTRAN。有人能告诉我如何将数据读入FORTRAN或C/IDL等变量吗?例如,结构的N个单元存储在文件“pxm.mos”中,如何将数据读入变量? 谢谢! 以下是描述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
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不是一个“变量”,它是结构的一个成员。整个结构作为单个实体编写。我不太明白逐字节读取的意义——大多数语言可以在一次操作中读取一个结构。如果您告诉我们您将使用哪种语言以及计算机和操作系统,我们可以提供更好的建议。