Возможен просмотр последнего байта упакованного поля.Вы хотите, чтобы от положительного / без знака до отрицательного, поэтому, если оно больше -1, вычтите его из нуля.
Из кратковременного ответа от MikeC теперь известно, что данные содержат non-preferred
знаков (то есть он может содержать от A до F в полубайте младшего разряда, тогда как знак preferred
будет C (положительным) или D (отрицательным). F без знака, считается положительным.
Это проверено с помощью DFSORT. Должно работать с SyncSORT. Оказывается, что DFSORT может понимать отрицательный упакованный десятичный ноль, но не будет создавать отрицательный упакованный десятичный ноль (этопозволит создать зонально-десятичный отрицательный ноль из упакованного десятичного числа с отрицательным нулем.
Идея состоит в том, что знак non-preferred
действителен и будет точно подписан для ввода в десятичную машинную инструкцию,но результатом всегда будет знак preferred
, и он будет правильным. Таким образом, если сначала добавить ноль, то поле превратится в знак preferred
, а затем проверка на -1 будет работать, как и ожидалось. С данными в знаке-nybbНапример, для упакованных десятичных полей у SORT есть несколько специфических и задокументированных действий, которые здесь просто не помогут.
Поскольку существует только одно значение, чтобы стать отрицательным нулем, X'0C 'после нормализации знаков уже проводится простая проверка и замена на константу X'0D 'для отрицательного нуля.Поскольку отрицательный ноль не будет работать, второй тест будет изменен с исходного минус один на ноль.
С непривлекательными знаками в данных:
SORT FIELDS=COPY
INREC IFTHEN=(WHEN=INIT,
OVERLAY=(32:+0,ADD,32,1,PD,TO=PD,LENGTH=1)),
IFTHEN=(WHEN=(32,1,CH,EQ,X'0C'),
OVERLAY=(32:X'0D')),
IFTHEN=(WHEN=(32,1,PD,GT,0),
OVERLAY=(32:+0,SUB,32,1,PD,TO=PD,LENGTH=1))
С предпочтительными знаками вданные:
SORT FIELDS=COPY
INREC IFTHEN=(WHEN=(32,1,CH,EQ,X'0C'),
OVERLAY=(32:X'0D')),
IFTHEN=(WHEN=(32,1,PD,GT,0),
OVERLAY=(32:+0,SUB,32,1,PD,TO=PD,LENGTH=1))
Примечание: Если знаки non-preferred
вставляются через программу COBOL, не использующую опцию компилятора NUMPROC (NOPFD), тогда результаты будут «интересными».