我在OpenVMS上運行的COBOL程序中遇到以下問題。COBOL問題轉移到comp-3變量
我有以下變量聲明:
01 STRUCT-1.
02 FIELD-A PIC S9(6) COMP-3.
02 FIELD-B PIC S9(8) COMP-3.
01 STRUCT-2.
03 SUB-STRUCT-1.
05 FIELD-A PIC 9(2).
05 FIELD-B PIC 9(4).
03 SUB-STRUCT-2.
05 FIELD-A PIC 9(4).
05 FIELD-B PIC 9(2).
05 FIELD-C PIC 9(2).
以下代碼:
* 1st Test:
MOVE 112011 TO FIELD-A OF STRUCT-1
MOVE 20100113 TO FIELD-B OF STRUCT-1
DISPLAY "FIELD-A : " FIELD-A OF STRUCT-1 CONVERSION
DISPLAY "FIELD-B : " FIELD-B OF STRUCT-1 CONVERSION
* 2nd Test:
MOVE 112011 TO SUB-STRUCT-1.
MOVE 20100113 TO SUB-STRUCT-2.
MOVE SUB-STRUCT-1 TO FIELD-A OF STRUCT-1
MOVE SUB-STRUCT-2 TO FIELD-B OF STRUCT-1
DISPLAY "SUB-STRUCT-1 : " SUB-STRUCT-1
DISPLAY "SUB-STRUCT-2 : " SUB-STRUCT-2
DISPLAY "FIELD-A : " FIELD-A OF STRUCT-1 CONVERSION
DISPLAY "FIELD-B : " FIELD-B OF STRUCT-1 CONVERSION
,輸出:
FIELD-A : 112011
FIELD-B : 20100113
SUB-STRUCT-1 : 112011
SUB-STRUCT-2 : 20100113
FIELD-A : 131323
FIELD-B : 23031303
爲什麼FIELD-A
和FIELD-B
保持值從什麼不同我搬進去他們在第二次測試?
我有其他移動從我的程序DISPLAY
到COMP-3
變量在那裏我沒有得到這個行爲。
男人,這把我帶回來。我記得當我們想看看壓縮的十進制字段的最後一個字節時,因爲「04」意味着某人已經在EBCDIC空間中移動了一個值。 – 2010-07-02 15:23:59
@David Thornley。關閉... EBCDIC空間是十六進制「40」。今天我們在壓縮的十進制字段上使用'IF NUMERIC'測試來檢查這種事情。令許多程序員感到困惑的是'MOVE'沒有爆炸,但在此之後,任何對該字段的計算引用都會導致數據異常終止(IBM land中的SOC7)。大多數人都期望'MOVE'能夠將它們炸掉。 – NealB 2010-07-02 15:55:03
不僅僅是關閉:當天,當我們打包字段時,最後一個字節有nybbles交換,所以一個以404040結尾的字符串將結束爲包裝十進制結尾4404(十六進制)。 (這實際上並不是COBOL,但是IBM 360專門設計用於運行COBOL,它有一個ASM指令執行格式化的MOVE,所以我認爲我的ASM經驗在這裏略有相關。) – 2010-07-02 21:09:06