SOC7 завершить при сравнении полей - PullRequest
0 голосов
/ 04 сентября 2018

Я получаю abend, сравнивая 2 поля Они определены как:

01 A   PIC S9(8) COMP VALUE 0.
01 B   PIC S9(5) COMP-3.

Утверждение, входящее в abend:

PERFORM VARYING A FROM 1 BY 1 UNTIL A > B 

Это утверждение находится в другом цикле, и значение B IS там увеличилось. Для первых двух итераций значение B является правильным. И для 3-й итерации значение отображаемого значения B не является числовым.

Не могли бы вы подсказать, что здесь можно сделать?

1 Ответ

0 голосов
/ 13 марта 2019

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

...