你如何在cobol展示国家领域?

时间:2016-04-13 08:58:14

标签: cobol

我喜欢在我的测试驱动程序中显示我编写的程序,以查看正在进行的操作。在我的情况下,我正在使用包含PIC N字段的字帖。 我想显示以下字段: 05 MESSAGE-TEXT PIC N(20).

正常 DISPLAY MESSAGE-TEXT IN COPYBOOK使我无法阅读。我是否必须定义一个新字段,例如PIC-X-FIELD,使用 MOVE FUNCTION DISPLAY-OF ( MESSAGE-TEXT IN COPYBOOK ) TO PIC-X-FIELD然后显示该PIC-X-FIELD?或者有更简单的方法吗?

1 个答案:

答案 0 :(得分:3)

当您在输出中查看十六进制的National(PIC N)字段时,您看到的乱码是该国家字段的十六进制值。它是该字段的UTF-8值。对于"普通"字符,这将是二进制零的一个字节,后跟" ASCII"角色的代码。

例如,大写字母" A"将是X' 0041'

使用国家字段时,您大多数情况下不必使用FUNCTION NATIONAL-OF进行转换。例如,对于PIC X到PIC N的简单移动,编译器知道您想要什么,并生成实现转换所需的代码。

转化不是自动转换的地方是...... DISPLAY

但是,您在DISPLAY中可以使用FUNCTION DISPLAY-OF(...)来获取输出。

这是一个简短的程序,用于说明上述内容(并且还显示了使用DISPLAY进行参考修改的FUNCTION的另一种用法):

   WORKING-STORAGE SECTION. 
   01  W-WHEN-COMPILED                     PIC X(8)BX(8). 
   01  A-NATIONAL                          PIC N(1) VALUE "A".
   01  A-DISPLAY                           PIC X VALUE "?". 
   PROCEDURE DIVISION. 
       MOVE WHEN-COMPILED           TO W-WHEN-COMPILED 
       DISPLAY "PROGRAM-NAME COMPILED ON " W-WHEN-COMPILED 

       DISPLAY 
               FUNCTION WHEN-COMPILED 
       DISPLAY 
               "DATE COMPILED (YYYY-MM-DD): " 
               FUNCTION WHEN-COMPILED ( 1 : 4 ) 
               "-" 
               FUNCTION WHEN-COMPILED ( 5 : 2 ) 
               "-" 
               FUNCTION WHEN-COMPILED ( 7 : 2 ) 
               " TIME: " 
               FUNCTION WHEN-COMPILED ( 9 : 2 ) 
               ":" 
               FUNCTION WHEN-COMPILED ( 11 : 2 ) 
               ":" 
               FUNCTION WHEN-COMPILED ( 13 : 2 ) 
               " OFFSET TO GMT:" 
               FUNCTION WHEN-COMPILED ( 17 : 5 ) 
       PERFORM                      DO-THE-DISPLAYS 

       ACCEPT A-DISPLAY 
       MOVE A-DISPLAY               TO A-NATIONAL 
       PERFORM                      DO-THE-DISPLAYS 
       ACCEPT A-DISPLAY 
       MOVE FUNCTION NATIONAL-OF 
             ( A-DISPLAY )          TO A-NATIONAL 
       PERFORM                      DO-THE-DISPLAYS 


       GOBACK 
       . 
   DO-THE-DISPLAYS. 
       DISPLAY 
              "THE NATIONAL, NATIVE>" 
               A-NATIONAL 
              "<" 
       DISPLAY 
              "THE DISPLAY, NATIVE >" 
               A-DISPLAY 
              "<" 
       DISPLAY 
              "THE DISPLAY-OF FUNC >" 
              FUNCTION DISPLAY-OF 
                ( A-NATIONAL ) 
              "<" 
       .

运行它的一些JCL:

//stepname EXEC PGM=program,TIME=(,2) nice to limit things always
//STEPLIB DD DISP=SHR,DSN=your executable library
//SYSOUT DD SYSOUT=* 
//SYSIN DD * 
C 
D 

输出结果为:

04/13/16 09.28.21                                                        
2016041309282183+0000                                                    
DATE COMPILED (YYYY-MM-DD): 2016-04-13 TIME: 09:28:21 OFFSET TO GMT:+0000
THE NATIONAL, NATIVE>  <                                                 
THE DISPLAY, NATIVE >?<                                                  
THE DISPLAY-OF FUNC >A<                                                  
THE NATIONAL, NATIVE>  <                                                 
THE DISPLAY, NATIVE >C<                                                  
THE DISPLAY-OF FUNC >C<                                                  
THE NATIONAL, NATIVE>  <                                                 
THE DISPLAY, NATIVE >D<                                                  
THE DISPLAY-OF FUNC >D<

国民队的十六进制:

THE NATIONAL, NATIVE>  <
ECC4DCECDDCD64DCECEC6044
385051396513B0513955E01C
 -----------------------
THE NATIONAL, NATIVE>  <
ECC4DCECDDCD64DCECEC6044
385051396513B0513955E03C
 -----------------------
THE NATIONAL, NATIVE>  <
ECC4DCECDDCD64DCECEC6044
385051396513B0513955E04C

注意,FUNCTION WHEN-COMPILED的输出可能不同,我从未将它用于COBOL for OS / 390和VM。此外,日期的格式可能不同,即安装选项。

也不是FUNCTION DISPLAY-OF(和NATIONAL-OF)可以采用代码页作为第二个参数。如果您碰巧要求National使用与默认代码页不同的代码页(并且无法/不想将代码页指定为编译器选项,或者在同一程序中需要多个代码页输出),则可以在函数中指定代码页以获得正确的输出。在这些类型的情况下,您不能使用MOVE等的默认转换,但必须通过函数显式转换。