我尝试将主机固定长度文件从 EBCDIC 格式转换为 ASCII 格式。目前我正在使用 JZOS api (ZFile)读取文件并逐字段转换。是否可以通过读取记录或行的整个字节来在不知道文件布局(又称COPYBOOK)的情况下进行转换?如果是这样,如何处理压缩小数和二进制值?
答案 0 :(得分:6)
是否可以在不知道文件布局的情况下进行转换(也就是说 COPYBOOK)只需读取记录或行的整个字节?
没有
文本字段必须从EBCDIC转换为ASCII。二进制和压缩十进制字段必须 不进行转换。如果您转换二进制字段然后您将改变它们的值,可能(可能?确定?)您将破坏它们的值。
来自大型机的二进制字段将是big-endian,您可能需要将这些字段转换为little endian。大型机上的半字中的+10是x'000A',而在小端机器上它是x'0A00'。
打包的十进制字段可能包含隐含的小数位。如果您的文件包含可能代表+123.45或+12,345的x'12345C'。该字段的格式告诉您如何解释数据。
如果不知道包含字段格式的记录布局,则无法进行转换。
根据我的经验,避免这些困难的最佳方法是在主机上预处理文件,将所有二进制和压缩十进制字段转换为带有嵌入显式符号和小数点的文本。然后该文件可以安全地通过代码页(在这种情况下为EBCDIC到ASCII)转换。
这种预处理可以通过大型机SORT实用程序轻松完成,该实用程序通常在数据转换方面表现优异。