【问题标题】:How to make the Compute Result from COBOL cut based on the picture clause that I set如何根据我设置的图片子句从 COBOL 剪切计算结果
【发布时间】:2020-07-16 02:23:26
【问题描述】:

我正在尝试显示 add、sub、mul 和 div 等计算结果。

我的问题是我设置了计算结果,但它没有削减。假设我说数字1 x 199999x99999,它将产生10 位数字,所以我必须在数据划分工作存储部分使用PIC 9(10)。但是如果11111x22222 它将产生 9 位数字,所以结果将是0246908402。应该有一个0,因为我设置了PIC 9(10),但它只产生了9位数字……如果我设置了PIC 9(6),它将被切割成908402

我想在不设置PIC的长度的情况下显示结果,因此如果它产生9位数字,它将显示所有9位数字,如果它产生7位数字,它将显示所有7位数字而不被剪切,并且没有 0 来填充所有空格。是否可以?这是代码

 ******************************************************** 
  DATA DIVISION.                                          
  WORKING-STORAGE SECTION.                                
  01 INBOUND-MESSAGE                  PIC X(14).          
  01 OUTBOUND-MESSAGE                 PIC X(80).          
  01 WS-VARIABLE.                                         
     05 DETAIL1                       PIC X(14)           
        VALUE 'HASIL TAMBAH: '.                           
     05 DETAIL2                       PIC X(14)           
        VALUE 'HASIL KURANG: '.                           
     05 DETAIL3                       PIC X(14)           
        VALUE 'HASIL KALI  : '.                           
     05 DETAIL4                       PIC X(14)           
        VALUE 'HASIL BAGI  : '.                           
     05 WS-NUM1                       PIC 9(5).           
     05 WS-NUM2                       PIC 9(5).           
     05 WS-ADD                        PIC 9(6).           
     05 WS-SUB                        PIC 9(6).           
     05 WS-MUL                        PIC 9(6). -> lets say i set this become 6 so if 11111x22222 it will produced 9  digits and will be cutted into 6 digits          
     05 WS-DIV                        PIC 9(6).           
  01 WS-STRING.                                           
     05 WS-CONCAT                        PIC X(80).       
     05 WS-CONCAT2                       PIC X(80).       
     05 WS-CONCAT3                       PIC X(80).       
     05 WS-CONCAT4                       PIC X(80).       
 ******************************************************** 
  PROCEDURE DIVISION.                                     
       EXEC CICS RECEIVE                              
         INTO (INBOUND-MESSAGE)                     
     END-EXEC.                                      
                                                    
     MOVE INBOUND-MESSAGE(5:5) TO WS-NUM1.          
     MOVE INBOUND-MESSAGE(10:5) TO WS-NUM2.         
     ADD WS-NUM1   TO WS-NUM2 GIVING WS-ADD.        
     SUBTRACT WS-NUM1   FROM WS-NUM2 GIVING WS-SUB. 
     MULTIPLY WS-NUM1 BY WS-NUM2 GIVING WS-MUL.     
     DIVIDE WS-NUM1 BY WS-NUM2 GIVING WS-DIV.       
                                                    
     STRING DETAIL1                                 
            WS-ADD                                  
     DELIMITED BY ':'                               
     INTO WS-CONCAT.                                
     STRING DETAIL2                                 
            WS-SUB                                  
     DELIMITED BY ':'                               
     INTO WS-CONCAT2.                               
     STRING DETAIL3                                 
            WS-MUL                                  
     DELIMITED BY ':'                               
     INTO WS-CONCAT3.                               
     STRING DETAIL4                                 
            WS-DIV                                  
     DELIMITED BY ':'                               
     INTO WS-CONCAT4.                               
     EXEC CICS SEND                                 
         FROM (WS-STRING)                           
         ERASE                                      
         NOHANDLE                                   
     END-EXEC.                                      
       EXEC CICS RETURN  
     END-EXEC.         

任何帮助将不胜感激

【问题讨论】:

  • 1 x 1 不会产生十位数字。99999x99999 会。不清楚你在问什么。
  • @MarquisofLorne,输入将是 5 位 x 5 位,没有 1-4 位

标签: cobol cics


【解决方案1】:

您可以使用 COBOL edited numerics

03 ws-output-number       pic zzzzzzzzz9.

ADD WS-NUM1   TO WS-NUM2 GIVING WS-ADD
move WS-ADD             to ws-output-number

会抑制前导零,但这会更好。

正如 Simon 指出的,您可以使用 FUNCTION TRIM(ws-output-number) 删除 前导空格

03 ws-output-number       pic --,---,---,--9.

因为它包含符号 + 在输出中添加逗号 提高可读性

【讨论】:

  • 只是为了补充一个好的答案:如果您不想将可能的空格输出到左侧,那么您也可以使用FUNCTION TRIM(ws-output-number) 来摆脱这些。
【解决方案2】:

如果我对您的问题的理解正确,您想抑制结果中的前导零吗?因此,给定您的示例,如果输出的最大可能值为 10 位数字,您将其定义为 PIC 9(10)。如果特定计算的输出结果为 0000123456,那么您希望显示 123456。理想情况下,您可能希望实际显示为 123,456 或 £123,456。这一切都可以使用零抑制和编辑技术来实现,这些技术在 IBM Enterprise COBOL 参考手册的“零抑制和替换编辑”部分下进行了描述。通常,您使用重新定义将输出字段更改为所需的格式。 所以 WS-MUL 仍然是 PIC 9(10),但由 WS-MUL-X 使用 PIC Z(9)9 重新定义。

【讨论】:

  • 我建议使用COMPUTATIONAL 字段进行算术运算,在这种情况下REDEFINE 将不起作用;使用单独的字段查看 Bruce 的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 2017-11-23
  • 2022-10-03
  • 1970-01-01
相关资源
最近更新 更多