我有一个文件中的7位数压缩十进制字段。我该如何定义数据项来提取/分离这7个数字?
例如,我想在一个数据项中获取前两个数字,在另一个数据项中获取其他数字,以便稍后操作它们。
在其他一些语言中,常见的做法可能是“除以10的倍数”,当然要选择适当的倍数。
但是,在COBOL中千万不要这样做。因为“除法”操作十分“昂贵”。
05 input-packed-decimal
PACKED-DECIMAL PIC 9(7).
然后:
05 FILLER
REDEFINES input-packed-decimal.
10 ipd-split-two-and-five
PACKED-DECIMAL PIC 99V9(5).
01 two-digits PIC 99.
01 five-digits PIC 9(5).
01 FILLER
REDEFINES five-digits.
05 five-digits-as-decimals PIC V9(5).
MOVE ipd-split-two-and-five TO two-digits
five-digits-as-decimals
然后,您可以随意使用 两位数字
和 五位数字
。
另一种方法:
01 ws-input-seven PIC 9(7).
01 FILLER
REDEFINES ws-input-seven.
05 two-digits PIC 99.
05 five-digits PIC 9(5).
MOVE input-packed-decimal TO ws-input-seven
05 FILLER
REDEFINES input-packed-decimal.
10 ignore-one-use-2nd-next-five
PACKED-DECIMAL PIC 9V9(5).
01 数组。
03 filler pic x(02) value '00'.
03 filler pic x(02) value '01'.
03 filler pic x(02) value '02'.
等等,直到...
03 filler pic x(02) value 'FF'.
01 两个数组重新定义为同一个数组。
03 harry occurs 256 pic x(02).
91 sub1。
03 filler pic x(01) value low-values.
93 sub1-byte2 pic x(01).
01 sub2重新定义sub1的计算。
01 pd pic x(04)。
01 pub pic 9(04)。
01 eggs。
03 eggs1 pic x(01).
03 eggs2 pic x(01).
执行变量 pub 的循环
从 1 开始,每次增加 1
直到 pub 大于 4
move pd(pub:1) to sub1-byte2
move harry(sub2 + 1) to eggs
display eggs1 egg2
end-perform.
因此,一个由256个2字节字段组成的数组,其值为“00”到“FF”。
遍历包含您打包十进制字段的4字节字段。
使用每个字节作为数组下标(加1以确保“00”指向数组中的第一个字段)。
指向的2字节字段具有表示打包十进制字段中该字节的2个半字节的值。
打包十进制字段中第四个字节的右半字节用于表示符号。