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 для числового поля, но я уверен, что вы можете вписать его где-то в приведенном выше коде.

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