我试图将在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
答案 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并按照提示输入顺序文件。