SOC7 завершить при сравнении полей
Я получаю аварийное завершение при сравнении 2 полей. Они определены как: 01 A PIC S9(8) COMP VALUE 0. 01 B PIC S9(5) COMP-3.
Утверждение, которое входит в конец:
ВЫПОЛНЯТЬ ИЗМЕНЕНИЕ А ОТ 1 НА 1 ДО А> В
Это утверждение находится в другом цикле, и значение B IS там увеличилось. Для первых двух итераций значение B является правильным. И для 3-й итерации значение отображаемого значения B не является числовым.
Не могли бы вы предложить, что можно сделать здесь?
0 ответов
У нас есть сценарий такого рода, где нам нужно сравнить 2 разных числовых поля и иногда нечисловые данные появляются из внешних систем. То, что мы сделали, переопределили поля с PIC X(n)
эквивалентно размеру байта и сохранил NUMERIC
проверить на IF
заявления. Что-то вроде этого -
IF WS-FIELD1 NUMERIC AND WS-FIELD2 NUMERIC
IF WS-FIELD1 NOT = WS-FIELD2
*** both fields are numeric but not equal
ELSE
*** both fields are numeric & equal
END-IF
ELSE
IF WS-FIELD1-X NOT = WS-FIELD2-X
*** both fields are non-numeric & not equal
ELSE
*** both fields are non-numeric but equal
END-IF
END-IF
Я не уверен, почему вы используете PERFORM VARYING
для числового поля, но я уверен, что вы можете вписать его где-то в приведенном выше коде.