【问题标题】:Abend S0C7 error while moving data to COMP-3 fields将数据移动到 COMP-3 字段时异常终止 S0C7 错误
【发布时间】:2022-12-24 01:20:40
【问题描述】:

将数据移动到 UNSTRING 之后的 COMP-3 字段。

UNSTRING 工作正常,但我无法在没有 S0C7 数据异常异常终止的情况下将数据移动到 COMP-3 字段。

我认为这是存储数据的问题。

下面是我的 COBOL 程序。

IDENTIFICATION DIVISION.                              
 PROGRAM-ID. ADDPROG.                                  
 DATA DIVISION.                                        
   WORKING-STORAGE SECTION.                            
    01 VALUEA         PIC X(20) VALUE '64.99|64.99'.   
    01 NOA            PIC S9(9)V9(02).                 
    01 NOB            PIC S9(9)V9(02).                 
    01 NOC            PIC S9(9)V99 COMP-3.             
    01 NOD            PIC S9(9)V99 COMP-3.             
 PROCEDURE DIVISION.                                   
  000-MAIN.                                            
     DISPLAY "EARLIER".                                
     DISPLAY 'NOA-' NOA.                               
     DISPLAY 'NOB-' NOB.                               
     DISPLAY "AFTER".                                  
     UNSTRING VALUEA                                   
     DELIMITED BY '|'                                  
     INTO NOA,NOB.          
     DISPLAY 'NOA-' NOA.    
     DISPLAY 'NOB-' NOB.    
     MOVE NOA TO NOC.       
     MOVE NOB TO NOD.       
     DISPLAY 'NOC-' NOC.    
     DISPLAY 'NOD-' NOD.    
     STOP RUN. 

编译后得到的输出。

请让我知道是否有任何其他方法可以将数据移动到COMP-3 字段或避免此错误。

【问题讨论】:

    标签: cobol mainframe


    【解决方案1】:

    您的代码有两个主要问题。要查看它们,您首先必须了解您的 UNSTRINGNOANOB 的工作方式与任何其他字符到字符的 MOVE 一样。 所以它从左边开始,一个字符一个字符地移动,直到一个字段结束,如果需要的话,添加一些空白来填充接收字段。

    所以问题一是 NOA 包含左对齐的值,而根据你的 PIC - 子句它应该是右对齐的,所以你需要一个中间 PIC X(12) JUSTIFIED RIGHT 字段,你 UNSTRING 到。

    导致 S0C7 的第二个问题是您的 PIC-clause 不包含小数点。 V 指定隐含的位置小数点,但它不会显示在输出中,也不会在解析字段内容时正确处理。要有一个正确处理小数点的字段,您应该有一个 PIC S9(9)V.9(02)

    另请参阅this question

    【讨论】:

      【解决方案2】:

      正如 piet.t 所说,UNSTRING 语句就像一个字母数字移动。因此我的建议是:

      1. NOANOB设为字母数字(PIC X(12)),以及
      2. 将您的移动语句更改为包含WITH CONVERSION,以便它将字母数字字段中的数字数据转换为COMP-3

      【讨论】:

      • WITH CONVERSION 不是 Enterprise COBOL 的一部分,因此可能对 OP 没有帮助。
      【解决方案3】:

      你的十进制数据字段是错误的只是有。像 01 NOA PIC S9(9).(02) 在他们身上!与 noc 变量相同,然后它应该运行。

      要将数据从数字字段移动到 COMP-3 字段,您需要确保数字字段中的数据对 COMP-3 字段有效。 COMP-3 字段存储压缩十进制数据,这意味着数字的数字被压缩到两位数的十进制字段中。不存储小数点,数字的符号存储在字段的最后一个半字节中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-24
        • 2011-03-03
        • 2016-10-07
        • 2021-05-21
        • 2020-09-24
        相关资源
        最近更新 更多