Числовое поле, принимающее символы на карте cics

У меня есть 4 поля на карте: 9 (6), 9 (3), 9 (3), 9 (3). Я написал код проверки так:

IF ROLLNUM IS NOT NUMERIC                          
MOVE DFHRED TO ROLLNUMC                         
MOVE 'INVALID DATA' TO RESMSGO                  
MOVE ROLLNUMI TO ROLLNUMO                       
PERFORM SEND-MAP THRU SEND-MAP-EXIT             
PERFORM KEY-VALIDATION THRU KEY-VALIDATION-EXIT.

Но я не получаю никаких ошибок при вставке значений, таких как A12AK, в базу данных cics. Он заменяет A на 1, B на 2 и так далее... Почему это происходит? И как этого избежать

3 ответа

Решение

Добавьте ATTRB=(UNPROT,NUM,FSET,IC) к полям DFHMDF набора карт BMS для числовых полей.

Вам также понадобится JUSTIFY=(RIGHT,ZERO).

Гилберт дает вам хороший совет по исправлению вашей карты CICS. Возьми это!

Позвольте мне попытаться объяснить "странные" ценности...

Когда персонаж (PIC X) находится в PIC 9 В элементе данных старшие 4 бита байта, представляющего значение символа, перезаписываются с помощью 'F'x. Младшие 4 бита остаются как есть.

На этом этапе может быть полезно взглянуть на таблицу символов EBCDIC

Обратите внимание, что шестнадцатеричное представление "A" - это "C1'x", а 1 - "F1". Когда "А" перемещается в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 как "NUM", единственными допустимыми символами, которые пользователь может ввести, являются цифры, что решает вашу проблему.

Наконец, обратите внимание, что некоторые не буквенные символы, такие как "@", не будут объединены в допустимую цифру.

CICS также предлагает вариант BIF DEEDIT.

Другие вопросы по тегам