gpt4 book ai didi

cobol - 如何防止 COBOL 中的内表溢出?

转载 作者:行者123 更新时间:2023-12-01 22:37:48 29 4
gpt4 key购买 nike

这可能是一个菜鸟问题,但我仍然很难弄清楚如何在 COBOL 中使用表。

目前我正在编写一个可以被其他程序调用的简单模块。我的程序必须在内部表中搜索数据,如果找不到,则添加到其中。

我有这张表:

01 TB-1 OCCURS 10 INDEXED X1.
03 CLIENT-NAME PIC N(30).
03 ORDER-NUMBER PIC 9(06).

当然,我可以增加 OCCURS 的数量,这样表溢出的可能性就会降低。但是,在测试模块时,我必须处理这样的情况:还要添加一条不适合表的记录。

处理这个问题的最佳方法是什么?我正在考虑通过返回错误消息来防止异常结束。

为此,我想定义一个新字段并将其用作计数器。所以基本上,每次我的模块添加一条记录时,它也会向计数器添加+1。有点像这样:

IF COUNTER < 10 
PERFORM ADD-RECORD
ELSE DISPLAY 'INPUT HAS EXCEEDED MAX OF 10 OCCURRENCES'
GOBACK
END-IF
.

ADD-RECORD.
MOVE INPUT-CLIENT-NAME TO CLIENT-NAME(X1) IN TB-1.
MOVE INPUT-ORDER-NUMBER TO ORDER-NUMBER(X1) IN TB-1.
ADD +1 TO COUNTER
.

这是一个好方法吗?你还有其他建议吗?在此先感谢您的帮助。

最佳答案

该问题缺少您实际使用的编译器的信息,因此您必须检查答案的哪一部分适合您。

最好的选择是:没有最大值(COBOL 2014 功能,您的编译器不太可能支持此功能)

01 TB-1 OCCURS DYNAMIC DEPENDING ON COUNTER
INDEXED X1.
03 CLIENT-NAME PIC N(30).
03 ORDER-NUMBER PIC 9(06).

由于您已经使用计数器检查是否使用 INDEXED 子句(例如 SEARCH),否则放弃它并仅使用计数器。

无论如何,我个人更喜欢使用计数器进行边界检查,即使在您的范围内(性能稍差,但更安全,因为如果出现问题,您的程序将异常终止):

    01 BOUND-ERR.
03 FILLER PIC X(26) VALUE
'INPUT HAS EXCEEDED MAX OF '.
03 BOUND-MAX PIC 9(03).
03 FILLER PIC X(11) VALUE
'OCCURENCES.'.
01 TB-1-COUNT PIC 9(03) VALUE 0.
*> may not work on your compiler...
01 TB-1-MAX AS CONSTANT 10.
*> ... then try the level 78 extension:
78 TB-1-MAX VALUE 10.
*> if this doesn't work, too, then use REPLACE for the actual bound:
REPLACE TB-1-MAX BY 10.
01 TB-1 OCCURS 1 TO TB-1-MAX DEPENDING ON TB-1-COUNT
INDEXED BY X1.
03 CLIENT-NAME PIC N(30).
03 ORDER-NUMBER PIC 9(06).


IF TB-1-COUNT = TB-1-MAX
MOVE TB-1-MAX TO BOUND-MAX
DISPLAY BOUND-ERR
MOVE 1 TO RETURN-CODE
GOBACK
END-IF
ADD +1 TO TB-1-COUNT
SET X1 UP BY 1
MOVE INPUT-CLIENT-NAME TO CLIENT-NAME (X1) IN TB-1.
MOVE INPUT-ORDER-NUMBER TO ORDER-NUMBER (X1) IN TB-1.

关于cobol - 如何防止 COBOL 中的内表溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38432967/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com