2016-04-13 4 views
1

Мне нравится помещать дисплеи в свои тестовые драйверы для программ, которые я написал, чтобы посмотреть, что происходит. В моем случае я работаю с тетради, содержащей поля PIC N. Я бы хотел показать следующее поле: 05 MESSAGE-TEXT PIC N(20).Как вы можете показать национальное поле в коболе?

A нормальный DISPLAY MESSAGE-TEXT IN COPYBOOK делает невозможным для меня чтение. Должен ли я определять новое поле, например, PIC-X-FIELD, использовать MOVE FUNCTION DISPLAY-OF (MESSAGE-TEXT IN COPYBOOK) TO PIC-X-FIELD, а затем сделать отображение этого PIC-X-FIELD? Или есть более простой способ?

+0

Ха-ха да, извините, я должен был уточнить: я не могу его прочитать, и когда я включаю шестерку, это показывает много бред. Я использую IN для указания полей, используемых в тетради. – Lena

ответ

3

Таблетка, которую вы видите, когда вы смотрите на поле 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 и т. Д., Но должны были бы явно преобразовывать через функции.

 Смежные вопросы

  • Нет связанных вопросов^_^