将 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" 值。
我尝试执行以下操作:
我在文件 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" 值。