Насколько я понимаю при использовании UNSTRING, использование фразы ON OVERFLOW будет полезно, если при использовании UNSTRING произойдет переполнение.
Но если переполнения нет, почемуВы используете фразу NOT ON OVERFLOW?
Единственной возможной утилитой для фразы NOT ON OVERFLOW будет передача инструкции, если переполнения нет, но какая польза от этого, если вы уже получили ожидаемый результат отUNSTRING?
В языке COBOL 74 не было фразы NOT ON OVERFLOW
.Следовательно, необходимо было использовать либо оператор GO TO
, либо установить флаг для проверки сразу после оператора IF
.Фраза NOT ON OVERFLOW
и END-UNSTRING
были добавлены в COBOL 85 для улучшения структуры программы.
Для вашего примера я внес некоторые изменения в первое отображение WS-VAR1
, а затем результат UNSTRING
.Обратите внимание, что условие OVERFLOW
относится к количеству элементов, а не к длине текста.Я выполнил три теста, чтобы показать результаты
IDENTIFICATION DIVISION.
PROGRAM-ID. YOUR-PROGRAM-NAME.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-VAR1 PIC A(11) VALUE "Hello World".
01 WS-VAR2 PIC A(5).
01 WS-VAR3 PIC A(5).
PROCEDURE DIVISION.
MAIN-PROCEDURE.
MOVE SPACE TO WS-VAR2 WS-VAR3
DISPLAY WS-VAR1
UNSTRING WS-VAR1
DELIMITED SPACE
INTO WS-VAR2 WS-VAR3
ON OVERFLOW
DISPLAY
"Incorrect number of items in WS-VAR1 - expected 2"
NOT ON OVERFLOW
DISPLAY WS-VAR2
DISPLAY WS-VAR3
END-UNSTRING
STOP RUN.
END PROGRAM YOUR-PROGRAM-NAME.
Результаты:
Hello World
Hello
World
--
Hello
Incorrect number of items in WS-VAR1 - expected 2
--
Hello W rld
Incorrect number of items in WS-VAR1 - expected 2
Как видно из кода, ON OVERFLOW
используется для обработки ошибок;NOT ON OVERFLOW
используется для обычной обработки.Без улучшенной структуры с NOT ON OVERFLOW
нормальная обработка будет следовать сразу же за обработкой ошибок, если только не используется ранее упомянутая обработка типа COBOL 74.
Обратите внимание, что DELIMITED ALL SPACE
дает результат, отличный от показанного для одного случая, выше.[Игнорировать --
]
--
Hello
Hello
--