gpt4 book ai didi

cobol - 从压缩十进制字段中分割数字

转载 作者:行者123 更新时间:2023-12-02 04:59:08 25 4
gpt4 key购买 nike

我的文件中有一个 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

第一种方法也适用于带符号的源字段(只需将 S 放在每个 PICture 子句中的适当位置即可)。

第二个不适用于带符号字段,因为源符号不会传播到两位数字段,因为MOVE甚至不知道存在这样一个字段。

重新定义 PACKED-DECIMAL 或 BINARY 字段时要小心(在 IBM 大型机上,这些字段也可以有 USAGE COMP-3 和 COMP/COMP-4/COMP-5)。当定义相同或相似的用法时,请始终定义相同的位数。对于 REDEFINES 字段,编译器将始终假设您知道自己在做什么,因此它不会为您执行任何“源截断”。因此,当您使用从属于 REDEFINES 的字段时,您必须确保不会显式或隐式地期望源代码被截断。

要获取第二位数字,切勿执行以下操作:

       05  FILLER 
REDEFINES input-packed-decimal.
10 ignore-one-use-2nd-next-five
PACKED-DECIMAL PIC 9V9(5).

要获取第二位数字,请像以前一样使用 PACKED-DECIMAL PIC 99V9(5),但仅使用一位数字位置定义接收字段。编译器会很乐意生成代码来执行您期望的截断。

如果您“无法使用 REDEFINES”,则必须在 WORKING-STORAGE 中创建一个与您的输入字段具有相同特征的新字段,并使用它。

我在这里使用的数据名称仅用于一般性解释。对你的任务使用好的、描述性的名称。如果前两位数字是零件类型,后五位数字是零件编号,请确保您的命名清晰可见。

不要将它们命名为“Var(n)”或类似名称,也不要给它们起误导性的名称。

关于cobol - 从压缩十进制字段中分割数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40583770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com