Гилберт дает вам хороший совет по исправлению вашей карты CICS. Возьми это!
Попробую объяснить "странные" значения...
Когда символ (PIC X
) помещается в элемент данных PIC 9
, верхние 4 бита байта, представляющего значение символа, замещаются 'F'x. Младшие 4 бита оставляются как есть.
На этом этапе может быть полезно взглянуть на таблицу символов EBCDIC.
Обратите внимание, что шестнадцатеричное представление «A» — это «C1»x, а 1 — это «F1»x. Когда 'A' перемещается в поле PIC 9
, он становится 1 (старшие 4 бита, 'C'x, заменяются на 'F'x, младшие 4 бита оставляются как есть). Подобные вещи для всех букв алфавита. Обратите внимание, что последовательность символов EBCDIC от 'A' до 'Z' не является непрерывной (есть пробелы, когда младшие 4 бита переходят в диапазон от 'A'x до 'F'x). Вот почему вы всегда будете получать «действительную» цифру при перемещении буквы из поля типа «X» в поле типа «9».
Результатом является допустимое числовое значение после перехода от элемента данных типа «X» к элементу данных «9», когда задействованы только цифры, буквы и ПРОБЕЛ. Затем он пройдет тест IF NUMERIC
.
Корень вашей проблемы заключается в том, что ваша карта CICS позволяет вводить нечисловые данные, когда это значение передается в ваш элемент рабочего хранилища, определенный как PIC 9
, оно преобразуется, как описано выше. Не то, что вы хотите! Как указал Гилберт, если вы определяете поле карты CICS как «ЧИСЛО», единственными допустимыми символами, которые пользователь может вводить, являются цифры, что решает вашу проблему.
Наконец, обратите внимание, что некоторые небуквенные символы, такие как '@', не будут соответствовать допустимой цифре.
person
NealB
schedule
30.04.2012