如何使用SYNCSORT格式化具有特定符号值的Packed Decimal字段?
我想使用SYNCSORT强制所有Packed Decimal字段为负号。关键要求是第二个半字节必须是Hex'D'。我有一种方法可行,但似乎太复杂了。为了与KISS原则保持一致,我希望有人有更好的方法。也许在最后4位使用位掩码?这是我提出的代码。有没有更好的办法?
*
*此排序逻辑旨在强制所有Packed Decimal金额
*有一个带有B'.... 1101'值的负号(Hex'xD')。
*
排序字段=复制
OUTFIL FILES = 1,
INCLUDE =(8,1,BI,NE,B'...... 1..1',或者,*正面包装的十进制
8,1,BI,EQ,B'.... 1111'),*未签名的包装十进制
OUTREC =(1:1,7,*包括+0
8:( - 1,MUL,8,1,PD),PD,LENGTH = 1,
9:9,72)
OUTFIL FILES = 2,
INCLUDE =(8,1,BI,EQ,B'.... 1..1',AND,* NEGATIVE PACKED DECIMAL
8,1,BI,NE,B'.... 1111'),* NOT UNSIGNED PACKED DECIMAL
OUTREC =(1:1,7,*包括-0
8:(+ 1,MUL,8,1,PD),PD,LENGTH = 1,
9:9,72)
没有找到相关结果
已邀请:
4 个回复
掏得透垦滩
哩翔购
bab
坝胺绣敝
符号(也就是说,它可以包含低位半字节中的A到F,而
符号可以是C(正数)或D (否定).F未签名,视为正面。 这是使用DFSORT测试的。它应该与SyncSORT一起使用。事实证明,DFSORT可以理解负的压缩十进制零,但它不会创建负的压缩十进制零(它将允许从负零压缩十进制创建分区十进制负零)。 这个想法是
符号是有效的,并且将被准确地签名以输入到十进制机器指令,但结果将始终是
符号,并且将是正确的。因此,首先添加零,该字段将变为
符号,然后-1的测试将按预期工作。对于压缩十进制字段的sign-nybble中的数据,SORT具有一些特定的和记录的行为,这在这里没有帮助。 由于只有一个值要处理成为负零,X'0C',在已经完成的符号归一化之后,有一个简单的测试并用负0的常数X'0D'替换。由于负零不起作用,第二次测试从原来的减1变为零。 在数据中有非首选标志:
有数据中的首选标志:
注意:如果通过COBOL程序填充
符号而不使用编译器选项NUMPROC(NOPFD),那么结果将是“有趣的”。