Ошибка функции поиска при извлечении данных из таблицы - PullRequest
0 голосов
/ 13 октября 2018
    01 emp-rec.
       05 emp-rec-num               pic x(3).

    01 ws-table-data.
       05 filler                   pic x(12)
           value 'A12FIRST ONT'.
       05 filler                   pic x(12)
           value 'A14FIRST QUE'.
       05 filler                   pic x(12)
           value 'B10THIRD QUE'.
       05 filler                   pic x(12)
           value 'B12SECONDONT'.
       05 filler                   pic x(12)
           value 'B14SECONDONT'.
       05 filler                   pic x(12)
           value 'C09THIRD ONT'.
       05 filler                   pic x(12)
           value 'C11FIRST QUE'.
       05 filler                   pic x(12)
           value 'C13FIRST ONT'.
       05 filler                   pic x(12)
           value 'C21FIRST ONT'.
       05 filler                   pic x(12)
           value 'C22FIRST ONT'.
       05 filler                   pic x(12)
           value 'C23SECONDQUE'.
       05 filler                   pic x(12)
           value 'C25FIRST QUE'.
       05 filler                   pic x(12)
           value 'C27SECONDQUE'.

01 ws-table REDEFINES ws-table-data.
       05 ws-table-element OCCURS 13 times 
       INDEXED BY data-index.
           10 ws-operator-number   pic x(3).
           10 ws-operator-type     pic x(6).
           10 ws-operator-province pic x(3).

50-process-table-records.
       set data-index to 1.
       search ws-table-element
           when (ws-operator-number(data-index) = emp-rec-num)
               move ws-operator-type(data-index) to detail-line-type
               move ws-operator-province(data-index) 
                   to detail-line-province
           when (ws-operator-number(data-index) is not equal to 
               emp-rec-num)
                   move 'Operator Not Found' to detail-line-type
       end-search.     

Вывод: https://prnt.sc/l5h64p

Я понятия не имею, почему первая запись в таблице печатается 13 раз, но она должна проходить по всей таблице.Когда emp-rec из входного файла совпадает с ws-operator-number, предполагается, что ws-operator-type и ws-operator-Province перемещаются в строку печати и печатаются, если в строке вместо этого не отображается сообщение.

Любая помощь оценена, спасибо!

1 Ответ

0 голосов
/ 13 октября 2018

Ваша вторая when фраза является отрицанием первой.Каждая фраза when должна использоваться, чтобы определить, когда оператор search должен завершиться.По сути, вы говорите, что поиск заканчивается, если em-rec-no не соответствует первой записи таблицы.

Измените код, чтобы соответствовать этому.

50-process-table-records.
       set data-index to 1.
       search ws-table-element
           at end
               move 'Operator Not Found' to detail-line-type
           when (ws-operator-number(data-index) = emp-rec-num)
               move ws-operator-type(data-index) to detail-line-type
               move ws-operator-province(data-index) 
                   to detail-line-province
       end-search.

Не зная, как 50-process-table-records используется, я не могу сказать, решит ли это проблему печати одних и тех же данных 13 раз.

...