COBOL85: Как найти количество строк в массиве динамически - PullRequest
0 голосов
/ 06 февраля 2020

В моей программе я продолжаю заполнять следующий массив данными, полученными из таблицы базы данных, затем проверяю его, чтобы найти определенные слова:

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 first product-line Второй product-line et c

Он работает, однако останавливается, только когда CNT1 равен 11, как я могу заполнить процедуру переменной CNT1, основываясь на том, сколько строк на самом деле находится в PRODUCTS- ТАБЛИЦА каждый раз?

1 Ответ

0 голосов
/ 27 февраля 2020

Я решил проблему, добавив счетчик строк массива (LINE-COUNTER-1), чтобы подсчитать (ADD 1 TO LINE-COUNTER-1), сколько раз я добавляю данные в массив и прекращаю писать отчет, когда "WRITE- СЧЕТЧИК = 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.              
...