我喜欢在我的测试驱动程序中显示我编写的程序,以查看正在进行的操作。在我的情况下,我正在使用包含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?或者有更简单的方法吗?
答案 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等的默认转换,但必须通过函数显式转换。