System i командная строка RPG CALL с упакованным числовым - как форматировать

Если параметр программы RPG определен как PACKED(11,0)

CALL MYPGM parm(x'12345678901f')

дает ошибку десятичных данных.

Идентификатор сообщения MCH1202 Причина . . . . . : знаковый или цифровой код упакованного или зонированного
десятичного операнда ошибочен. Допустимые знаки — шестнадцатеричные A-F, допустимый диапазон цифр — шестнадцатеричные 0-9.

В дампе программы параметр выглядит так:

PACKED(11,0)         12345678901.   
VALUE IN HEX         '12345678901F'X 

Погуглил, но не нашел простого объяснения формата упакованного поля.


person mike    schedule 07.07.2017    source источник
comment
У вас есть правильная идея для упакованы. Я не могу воспроизвести ваши симптомы. Вы абсолютно уверены, что параметр определен как упакованный? А вы абсолютно уверены, что ошибка вызвана звонком, а не чем-то внутри программы?   -  person John Y    schedule 07.07.2017
comment
Да, глядя на дамп программы, параметр PACKED(11,0) 12345678901. ЗНАЧЕНИЕ В ШЕСТНАДЦАТЕРИЧНОМ '12345678901F'X   -  person mike    schedule 07.07.2017
comment
Я согласен с Джоном, вопрос не в том, сколько стоит ваш звонок. Сообщение об ошибке и дамп должны сказать вам, какой оператор вызывает проблему. Примечание: нужно h option(*srcstmt), чтобы ошибка ссылалась на номер оператора исходного кода, а не на строку # листинга компиляции.   -  person Charles    schedule 07.07.2017
comment
@John Y, спасибо, проблема была вызвана чем-то другим!   -  person mike    schedule 10.07.2017
comment
@Charles - ты был прав, проблема была вызвана чем-то другим!   -  person mike    schedule 10.07.2017


Ответы (2)


Вероятно, было бы лучше написать программу-оболочку, которая принимает параметр как числовой или символьный и преобразует его в упакованный.

person David G    schedule 10.07.2017
comment
большое спасибо за предложение, это то, что я в конечном итоге сделал - я все еще хотел бы пересмотреть информацию о числовых параметрах в шестнадцатеричном формате, раньше были руководства по этому поводу, но я не могу найти их в Интернете, - person mike; 10.07.2017
comment
@mike Обычно здесь возникает необходимость компиляции *CMD. Вы можете думать об объектах *CMD как о способе создания «прототипа» для CL. С *CMD потребность в шестнадцатеричных значениях практически исчезает. - person user2338816; 17.08.2017

Если проблема действительно связана с параметром, вы можете обойти это, выполнив следующий обходной путь.

Добавьте точку останова отладки в свои программы INZSR и выполните вызов mypgm parm(' '). Затем вы можете добавить правильное значение с помощью EVAL в режиме отладки.

person zero-sub    schedule 05.09.2017