从表中检索数据时搜索功能错误

时间:2018-10-12 23:01:39

标签: cobol mainframe

    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 :(得分:3)

第二个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次相同数据的问题。