跳转到主要内容
模块 4 · 第 2 课(共 2)课程中的8/10~15 min
模块课程(2/2)

表和 OCCURS 子句

在 COBOL 中,没有“数组”或“向量”关键字来定义同质数据列表。为此,您可以使用 OCCURS 子句,该子句指定变量或结构在内存中重复的次数。

使用 OCCURS 定义表

OCCURS 子句添加到组结构(级别 01)内的从属变量(例如,级别 05 或更高级别)的声明中:

COBOL
01 WS-SALES-DATA.
    05 WS-MONTHLY-SALES PIC 9(4) OCCURS 12 TIMES.

在此示例中,WS-MONTHLY-SALES 是一个由 12 个数字元素(每个元素为 4 位)组成的表。为该记录分配的内存正好是 12 * 4 = 48 个字符。

访问元素和索引

要访问表中的特定元素,请在字段名称后面的圆括号中指定索引。

[!重要] 与大多数使用基于 0 的索引的现代语言不同,COBOL 使用基于 1 的索引。第一个元素位于索引 1 处,第二个元素位于索引 2 处,依此类推。

COBOL
MOVE 1500 TO WS-MONTHLY-SALES(1).
MOVE 2400 TO WS-MONTHLY-SALES(2).

遍历表(迭代)

要循环遍历表的元素,您可以使用 PERFORM VARYING 语句或在 PERFORM UNTIL 循环中手动管理计数器:

COBOL
PERFORM UNTIL WS-INDEX > 12
    DISPLAY "Sales: " WS-MONTHLY-SALES(WS-INDEX)
    ADD 1 TO WS-INDEX
END-PERFORM.

自己尝试一下

锻炼#cobol.m4.l2.e1
尝试:0加载中...

使用 OCCURS 子句在 WS-WEATHER-DATA 组结构下声明包含 5 位十进制温度(3 位整数和 1 位小数)的表。

正在加载编辑器...
显示提示

写入:05 WS-温度 PIC 9(3)V9 出现 5 次。

3 次尝试后可用的解决方案

锻炼#cobol.m4.l2.e2
尝试:0加载中...

使用 MOVE 语句分别使用值 1200、1500 和 1800 初始化 WS-MONTHLY-SALES 表的前三个元素。请记住,COBOL 索引从 1 开始。

正在加载编辑器...
显示提示

使用 MOVE 1200 至 WS-MONTHLY-SALES(1)。对于第一个元素,然后使用索引 (2) 和 (3) 对第二个和第三个元素重复。

3 次尝试后可用的解决方案