Таблетка, которую вы видите, когда вы смотрите на поле National (PIC N) в шестнадцатеричном виде на вашем выходе, представляет собой шестнадцатеричное значение этого национального поля. Это значение UTF-8 этого поля. Для «обычных» символов это будет один байт двоичных нулей, за которым следует код «ASCII» для символа.
Заглавная буква «А», например, будет X'0041 '.
При использовании национальных полей вам больше не нужно использовать функцию FUNCTION NATIONAL-OF для преобразования. Например, для простого MOVE PIC X для PIC N компилятор знает, чего вы хотите, и генерирует код, необходимый для преобразования.
Одно место, где конверсия не является автоматической ... DISPLAY
.
Однако, что вы можете сделать в DISPLAY, используйте FUNCTION DISPLAY-OF (...), чтобы получить свой вывод.
Вот короткая программа, которая иллюстрирует выше (а также показывает другое использование, справочно-модифицированный, 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 для OS/390 и VM. Кроме того, формат даты может отличаться, параметр установки.
Также нет, что ФУНКЦИОНАЛЬНЫЙ ДИСПЛЕЙ (и НАЦИОНАЛЬНЫЙ) может в качестве второго аргумента привести кодовую страницу. Если вам потребовалось указать National с другой кодовой страницей, чем по умолчанию (и не могли/не хотели указывать кодовую страницу в качестве параметра компилятора или требовали множественного вывода кодовой страницы в той же программе), вы можете указать Страница кода в функциях для получения правильного вывода. В этих случаях вы не могли использовать преобразование по умолчанию для MOVE и т. Д., Но должны были бы явно преобразовывать через функции.
Ха-ха да, извините, я должен был уточнить: я не могу его прочитать, и когда я включаю шестерку, это показывает много бред. Я использую IN для указания полей, используемых в тетради. – Lena