COBOL85:如何动态查找数组中的行数

COBOL85: How to find number of rows in an array dynamically

在我的程序中,我一直用从数据库中获得的数据填充以下数组 table 然后检查它以找到某些单词:

01 PRODUCTS-TABLE.
     03 PRODUCT-LINE                 PIC X(40) OCCURS 50 TIMES.

有时出现6次,有时超过6次。

我想在每次向数组写入数据时查找数组中的行数,我该怎么做?

我试过了,但它基于固定长度:

 INSPECT-PROCESS.
     MOVE 0 TO TALLY-1.
     INSPECT PRODUCTS-TABLE TALLYING TALLY-1 FOR ALL "PRODUCT"
     IF TALLY-1 > 0
     MOVE SER-NUMBER TO HITS-SN-OUTPUT
     MOVE FILLER-SYM TO FILLER-O
     MOVE PRODUCT-LINE(1) TO HITS-PR-OUTPUT
     WRITE HITS-REC
     PERFORM WRITE-REPORT VARYING CNT1 FROM 2 BY 1 UNTIL CNT1 = 11.

 WRITE-REPORT.
     MOVE "   " TO HITS-SN-OUTPUT
     MOVE PRODUCT-LINE(CNT1) TO HITS-TX-OUTPUT
     WRITE HITS-REC.

在第一行输出中写入 SN 和第一个产品线,然后在后续行中写入所有剩余的产品线并空白 SN。

类似于: 12345678 第一条产品线 第二条产品线 等等

它正在工作,但是,它仅在 CNT1 为 11 时停止,我如何根据每次在 PRODUCTS-TABLE 中实际有多少行为过程提供一个变量 CNT1?

我通过添加一个数组行计数器 (LINE-COUNTER-1) 来计算 (ADD 1 TO LINE-COUNTER-1) 向数组添加数据并在 "WRITE-COUNTER = LINE-COUNTER-1"

 INSPECT-PROCESS.                                                 
     MOVE 0 TO TALLY-1                       
     INSPECT PRODUCTS-TABLE TALLYING TALLY-1 FOR ALL "PRODUCT"       
     IF TALLY-1 > 0            
     MOVE HOLD-SER-NUM TO HITS-SN-OUTPUT                          
     MOVE FILLER-SYM TO FILLER-O                                  
     MOVE PRODUCT-LINE(1) TO HITS-PR-OUTPUT                         
     WRITE HITS-REC                                               
     PERFORM WRITE-REPORT VARYING WRITE-COUNTER FROM 2 BY 1       
     UNTIL WRITE-COUNTER = LINE-COUNTER-1.