从OpenVMS转换/展平RMS索引文件

时间:2017-03-06 06:40:23

标签: fortran fortran77 openvms

我试图将在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

为什么程序每个记录写入的字节数更少?我做错了吗?

修改 使用OpenVMS的内置实用程序为我提供了预期的平面文件。

ANAL/RMS/FDL FILE.FDL input.data
EDIT/FDL/ANALY=FILE.FDL FILE.FDL

从' INDEXED'更改组织后到' SEQUENTIAL'并且连接到“是”,执行以下命令可以得到正确大小的平面文件(包括每条记录的填充)。

CONVERT/FDL=FILE.FDL input.data output.data

2 个答案:

答案 0 :(得分:0)

2044看起来像是最大值。 VMS上的记录大小FORTRAN用于写入数据。如果文件大小真的是1000 * 2044,那就错了。

行中DUMP/HEADER/BLOCKS=COUNT=0 FOR002.DAT的输出内容'记录大小','文件结束块'和'文件结束字节'?

我希望2594字节写在两个记录中。鉴于标志有两个字节,您将看到长度为2044和554的记录。(您可以使用DUMP/RECORD FOR002.DAT/PAGE确认。)每条记录都有一个两个字节的记录长度字段。也就是说,您的文件大小应为1000 *(2044 + 2 + 554 + 2)= 2602000。

您可以使用"文件结尾"来仔细检查;来自第一个DUMP命令的数据:(文件块结束-1)* 512 +文件字节结束。

答案 1 :(得分:0)

如果您不需要在程序中执行此操作,请使用CONVERT

function dothis() 
{
var x = document.getElementById ("wantspin")
} 

您可以使用$ EDIT / FDL FIXED.FDL并按照提示输入顺序文件。