Cobol 从压缩十进制字段中拆分数字

Cobol 从压缩十进制字段中拆分数字,cobol,gnucobol,cobol85,cobol.net,Cobol,Gnucobol,Cobol85,Cobol.net,我的文件中有一个7位数的压缩十进制字段。如何定义提取/分离这7位数字的数据项 例如,我希望在一个数据项中有前两个数字,在另一个数据项中有其他数字,以便以后可以对它们进行操作。在其他一些语言中,常见的一种方法是“除以10的倍数”,当然是适当的倍数 但是,千万不要用COBOL来考虑这个问题。“分割”是“昂贵的” 然后: 然后,您可以使用两位数和五位数来实现任何您想要的功能 另一种方式: 01 ws-input-seven PIC 9(7). 0

我的文件中有一个7位数的压缩十进制字段。如何定义提取/分离这7位数字的数据项


例如,我希望在一个数据项中有前两个数字,在另一个数据项中有其他数字,以便以后可以对它们进行操作。

在其他一些语言中,常见的一种方法是“除以10的倍数”,当然是适当的倍数

但是,千万不要用COBOL来考虑这个问题。“分割”是“昂贵的”

然后:

然后,您可以使用
两位数
五位数
来实现任何您想要的功能

另一种方式:

   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
第一种方法也适用于签名源字段(只需在每个PICture子句的适当位置放置一个S)

第二个符号不适用于有符号字段,因为源符号不会传播到两位字段,因为MOVE甚至不知道有这样的字段

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

要获取第二个数字,请不要执行以下操作:

       05  FILLER 
           REDEFINES input-packed-decimal.
           10  ignore-one-use-2nd-next-five
                            PACKED-DECIMAL PIC 9V9(5).
要获取第二个数字,请像以前一样使用压缩十进制PIC 99V9(5),但只使用一个数字位置定义接收字段。编译器将很高兴地生成代码来执行您期望的截断

如果“无法使用重定义”,则必须在工作存储器中创建一个与输入字段具有相同特征的新字段,并使用该字段

我在这里使用的数据名称仅用于一般解释。在任务中使用好的、描述性的名称。如果前两位是零件类型,后五位是零件号,请确保您的命名中没有此项

不要给他们起“Var(n)”或类似的名字,也不要给他们起误导性的名字。

01数组

03  filler pic x(02) value '00'.

03  filler pic x(02) value '01'.

03  filler pic x(02) value '02'.
03  harry occurs 256 pic x(02).
等等,直到

03  filler pic x(02) value 'FF'.
01两个数组重新定义数组

03  filler pic x(02) value '00'.

03  filler pic x(02) value '01'.

03  filler pic x(02) value '02'.
03  harry occurs 256 pic x(02).
91第1款

03  filler pic x(01) value low-values.

93  sub1-byte2 pic x(01).
01 sub2重新定义sub1 comp

01 pd pic x(04)

01 pub pic 9(04)

01个鸡蛋

03  eggs1 pic x(01).

03  eggs2 pic x(01).
表演不同的酒吧

从1到1

直到酒吧>4

move pd(pub:1) to sub1-byte2

move harry(sub2 + 1) to eggs

display eggs1 egg2
结束表演

因此,一个256个2字节字段的数组,其值为'00'到'FF'

单步遍历保存压缩十进制字段的4字节字段

将每个字节用作数组的下标(添加1以确保数组中第一个字段的“00”点)

指向的2字节字段具有表示压缩十进制字段中该字节的2个半字节的值


压缩十进制字段中第四个字节的右半部分是符号。

@Murad,您必须对标记进行一些选择。如果JCL是相关的,那么OpenCOBOL和COBOL.Net就不是相关的。如果OpenCOBOL是相关的,那么COBOL.Net不是相关的,反之亦然。@Murad:如果问题为您解答:请以这种方式标记或提供更多详细信息