如何在不编写cobol程序的情况下从vsam文件中确定打包PIC cobol子句的数值?

时间:2016-04-29 16:03:47

标签: code-analysis cobol vsam

我使用了一个实用程序包(vsmr)来读取VSAM文件的值,并且我可以使用copybook源代码。

如果我有如下定义(请原谅格式化)

01 RECORD
   05 RECORD-X PIC S9(3)V99 COMP-3
   05 RECORD-Y PIC S9(3)V99 COMP-3
   05 RECORD-Z PIC S9(3) COMP-3
   05 RECORD-ALPHA PIC X(10)

我在数据中有以下内容

00 20 0C 01 10 0C 01 00 0C

如何确定RECORD-X的数值?

我假设RECORD-X占用3个字节,值00 20 0C对应于RECORD-X的值,但我不知道如何将其转换为人类可读的值(在算法上,不一定以编程方式)。

我还假设值01 10 0C对应于RECORD-Y的值。我的假设是否正确?

1 个答案:

答案 0 :(得分:4)

COMP-3是二进制编码十进制(BCD)的实现。一个字节中的每个半字节对应一个数字,最后一个半字节持有符号。你在哪里......

00 20 0C 01 10 0C 01 00 0C

...我们可以将前三个字节映射到RECORD-X,其值为+002.00。具有值C,A,F或E的符号半字节在算术上被认为是正的;具有B或D值的符号半字节在算术上被认为是负的。小数点未在数据中编码,您必须具有字段定义才能知道它的位置。

IBM Enterprise COBOL的概念是"首选标志"其中C表示正数,D表示负数。如果您确定您的数据是全部"首选标志,则可以利用优化。"

您对RECORD-Y的假设是正确的,其值为+11.00。

如果您正在编写COBOL,则无需实现任何算法将其转换为人类可读的值,只需MOVE RECORD-X TO RECORD-X-DISPLAY RECORD-X-DISPLAY定义PIC +999.99