将十六进制移动到cobol中的comp声明变量

Gre*_*koz 2 cobol

是否可以将一个十六进制字符串分配给comp或二进制声明的变量?

示例:01 COMP-VAR PIC 9(4)COMP.

将X'04D2'移至COMP-VAR.

应该输出+1234.

编辑:

对不起,我只是举了一个例子.真实情况是数据将来自外部源,即数据集.在将数据移动到comp声明变量之前,我需要将数据存储在字母数字变量中.我的问题是,当我将字母数字数据移动到comp变量时数据不正确.非常感激您的帮忙.

Nea*_*alB 6

我想你在找REDEFINES.将二进制值重新定义为字符,执行不违反任何赋值规则的赋值,然后在后续操作中使用二进制表示.这个程序说明了你的例子:

IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01.
   02 COMP-VAR PIC 9(4) COMP.
   02 COMP-X   REDEFINES COMP-VAR PIC X(2).
PROCEDURE DIVISION.
   MOVE X'04D2' TO COMP-X
   DISPLAY COMP-VAR
   GOBACK
   .
Run Code Online (Sandbox Code Playgroud)

这显示1234.

更大的问题是你为什么需要这样做?我怀疑您正在尝试读取其中包含多种记录格式的文件.根据一些常见的记录标识符,您需要将记录的一部分作为字符或二进制文件读取.通常情况下,这在COBOL中有所不同.

这是我的意思的一个更大的例子.假设您有一个3字节长的输入记录.当第一个字节为'B'时,它告诉您接下来的两个字节应该被视为二进制(COMP)值.当第一个字节是'X'时,您需要将接下来的两个字节读作文本(X)数据.举个例子,这是两个记录的样子:

 X'E7C1C2' 
 X'C204D2'
Run Code Online (Sandbox Code Playgroud)

第一条记录是包含值"AB"(EBCDIC)的文本记录.第二条记录是二进制,包含值1234.处理这些记录的程序可能类似于:

 IDENTIFICATION DIVISION.
 PROGRAM-ID. EXAMPLE.
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01  INPUT-RECORD.
     02 REC-TCD       PIC X.
        88 REC-TCD-BIN   VALUE 'B'.
        88 REC-TCD-CHAR  VALUE 'X'.
     02 REC-DUMMY        PIC X(2).
     02 REC-COMP-VAR  REDEFINES REC-DUMMY  PIC 9(4) BINARY.
     02 REC-CHAR-VAR  REDEFINES REC-DUMMY  PIC X(2).
 PROCEDURE DIVISION.
*
*    THIS IS A CHARACTER RECORD
*
     MOVE X'E7C1C2' TO INPUT-RECORD
     PERFORM DISPLAY-INPUT-RECORD
*
*    THIS IS A BINARY RECORD
*
     MOVE X'C204D2' TO INPUT-RECORD
     PERFORM DISPLAY-INPUT-RECORD
     GOBACK
     .
 DISPLAY-INPUT-RECORD.
     EVALUATE TRUE
         WHEN REC-TCD-BIN
              DISPLAY 'REC TYPE: '     REC-TCD
                      ' BINARY DATA: ' REC-COMP-VAR
         WHEN REC-TCD-CHAR
              DISPLAY 'REC TYPE: '     REC-TCD
                      ' CHAR DATA  : ' REC-CHAR-VAR
         WHEN OTHER
              DISPLAY 'UNKNOWN RECORD TYPE: ' REC-TCD
     END-EVALUATE
     . 
Run Code Online (Sandbox Code Playgroud)

该程序的输出是:

******************************** Top of Data ***********************************
REC-TYPE: X CHAR DATA  : AB
REC-TYPE: B BINARY DATA: 1234
******************************* Bottom of Data *********************************
Run Code Online (Sandbox Code Playgroud)

查看INPUT-RECORD定义.第一个字节确定如何编写记录的其余部分.REC-DUMMY通常被定义为随后重新定义的"通用"缓冲区.在可变长度输入记录的情况下,REC-DUMMY被定义为与最长记录变体一样长,因此它的后续REDEFINE不会"扰乱"编译器.REC-DUMMY之后的所有数据项都以相同的级别编号(示例中为02)开头,并将其重新定义为适当的格式.后续处理根据REC-TCD中的值使用任何重新定义的记录.