根据我UNSTRING
的使用理解,如果在使用中ON OVERFLOW [INSTRUCTION]
会出现溢出,则使用会很有用UNSTRING
.
但如果没有溢出,你为什么要使用NOT ON OVERFLOW [INSTRUCTION]
?
唯一可行的实用程序NOT ON OVERFLOW [INSTRUCTION]
是在没有溢出的情况下传递指令,但如果已经有了预期的结果,那将会使用什么UNSTRING
?
在这个例子中是否有任何具体的例子如何有用:
IDENTIFICATION DIVISION.
PROGRAM-ID. YOUR-PROGRAM-NAME.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WS-VAR1 PIC A(11) VALUE "Hello World".
01 WS-VAR2 PIC A(5).
01 WS-VAR3 PIC A(5).
01 WS-COMPTEUR PIC 9 VALUE 2.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
INTO WS-VAR2 WS-VAR3
WITH POINTER WS-COMPTEUR
ON OVERFLOW DISPLAY "This string is too large"
END-UNSTRING.
DISPLAY WS-VAR2
DISPLAY WS-VAR3.
STOP RUN.
END PROGRAM YOUR-PROGRAM-NAME.
Run Code Online (Sandbox Code Playgroud)
即使我阅读IBM文档,它也没有给我很多解释,在这个实例中可以使用什么,但显示消息?
IBM文档:链接
根据我的理解,当使用UNSTRING时,如果使用UNSTRING会出现溢出,使用ON OVERFLOW短语将非常有用.
但是如果没有溢出,为什么你会使用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.
Run Code Online (Sandbox Code Playgroud)
结果:
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
Run Code Online (Sandbox Code Playgroud)
从代码中可以看出,ON OVERFLOW
用于错误处理; NOT ON OVERFLOW
用于正常处理.如果没有改进的结构NOT ON OVERFLOW
,正常处理将立即跟随错误处理,除非使用前面提到的COBOL 74类型处理.
注意,DELIMITED ALL SPACE
给出的结果与上面一个案例所示的结果不同.[忽略--
]
--
Hello
Hello
--
Run Code Online (Sandbox Code Playgroud)