将 comp 移动到 comp Cobol 但不起作用

Move comp to comp Cobol but don't work

我尝试执行以下操作:

我在文件 ETTMAS18 中有三个变量:

C43LECA  PIC S9(09) COMP. 
C43LCOME PIC S9(09) COMP. 
C43CCHEC PIC  X(01).

这些变量包含:

C43LECA    = 000000999  (three last positions)
C43LCOME   = 000000888  (five last positions)
C43CCHEC   = 1 

然后我改成一个变量:999008881

然后移动到W-CTOAZ710-COA43LCOME PIC S9(9) USAGE COMP.

COPY ETTMAS18: 

    10  C43LECA               PIC S9(09) COMP. 
    10  C43LCOME              PIC S9(09) COMP. 
    10  C43CCHEC              PIC  X(01). 



    05 WS-COMERC-AUX.                                             
       10 C43LECA    PIC 9(3).                                   
       10 C43LCOME   PIC 9(5).                                   
       10 C43CCHEC   PIC 9(1).                                   

    05 WS-COMERC-AUX-BIN REDEFINES WS-COMERC-AUX PIC S9(9) USAGE COMP. 

    10 W-CTOAZ710-COA43LCOME        PIC S9(9) USAGE COMP.

     MOVE 0                      TO WS-COMERC-AUX                 
                                    WS-COMERC-AUX-BIN             

     MOVE C43LECA  IN ETTMAS18 TO C43LECA    IN WS-COMERC-AUX   
     MOVE C43LCOME IN ETTMAS18 TO C43LCOME   IN WS-COMERC-AUX   
     MOVE C43CCHEC IN ETTMAS18 TO C43CCHEC   IN WS-COMERC-AUX   

     MOVE WS-COMERC-AUX-BIN       TO W-CTOAZ710-COA43LCOME         
                                     W-CTOAZ710-COA43LCOME-DES     

     IF WS-FECHA-ACT = '2015-03-10'                               
         DISPLAY 'C43LECA  IN ETTMAS18: ' C43LECA  IN ETTMAS18     
         DISPLAY 'C43LCOME IN ETTMAS18: ' C43LCOME IN ETTMAS18     
         DISPLAY 'C43CCHEC IN ETTMAS18: ' C43CCHEC IN ETTMAS18     
         DISPLAY 'C43LECA IN WS-COMERC-AUX : ' 
                                          C43LECA    IN WS-COMERC-AUX 
         DISPLAY 'C43LCOME IN WS-COMERC-AUX : '                     
                                          C43LCOME   IN WS-COMERC-AUX 
         DISPLAY 'C43CCHEC IN WS-COMERC-AUX : '                     
                                          C43CCHEC   IN WS-COMERC-AUX 
         DISPLAY 'WS-COMERC-AUX: '      WS-COMERC-AUX               
         DISPLAY 'WS-COMERC-AUX-BIN: ' WS-COMERC-AUX-BIN           
         DISPLAY 'W-CTOAZ710-COA43LCOME: '                         
                                       W-CTOAZ710-COA43LCOME           
         DISPLAY '******************************************'       
     END-IF     

显示:

   C43LECA  IN ETTMAS18: 000000999   
   C43LCOME IN ETTMAS18: 000000888   
   C43CCHEC IN ETTMAS18: 1           
   C43LECA IN WS-COMERC-AUX : 999     
   C43LCOME IN WS-COMERC-AUX : 00888 
   C43CCHEC IN WS-COMERC-AUX : 1     
   WS-COMERC-AUX: 999008881     This value is the correct value.     
   WS-COMERC-AUX-BIN: 10105806M     (I don't understand) 
   W-CTOAZ710-COA43LCOME: 10105806M (I don't understand) 

在输出中 (w-ctoaz710-coa43lcome) 被截断:

       9990

十六进制值:

       9990 
       FFFF 
       9990

有人可以解释一下吗?

你的问题在这里:

05 WS-COMERC-AUX-BIN REDEFINES WS-COMERC-AUX PIC S9(9) USAGE COMP. 

所做的只是允许您的程序使用新的数据定义。数据没有变化(除非你做一个)。

这意味着你有 "character" 数据,然后你只是说 "hey, I'm going to use this as binary"。

对您来说最简单的事情就是从您的 REDEFINES 中删除 COMP。 USAGE DISPLAY数字字段将被移动到二进制字段,编译器将生成翻译所需的代码。

您的文件被截断的原因是因为您有一个 8 字节的字符值被视为四字节的二进制值。如果您 "look" 四字节二进制值,它将显示为截断的 "character" 值。