Skip to main content

Code looks like below.

       01  T1-DS-FDBK-TBL.
           05  T1-DS-FDBK-ENTRY  OCCURS  999 TIMES
                                     ASCENDING KEY IS T1-DS-FDBK-UNIT
                                     INDEXED BY T1-NDX.
               10  T1-DS-FDBK-UNIT         PIC X(4).
               10  T1-DS-FDBK-RPTIND       PIC X(1).

.

.

    SEARCH ALL T1-DS-FDBK-ENTRY
        AT END MOVE 'Y'                TO WS-FDBK-TO-RPT-SW
         WHEN T1-DS-FDBK-UNIT(T1-NDX) = WS-DIV-SUB
              MOVE T1-DS-FDBK-RPTIND(T1-NDX) TO WS-FDBK-TO-RPT-SW
    END-SEARCH.

I actually don't find any reason, why binary search would not be successful.


#COBOLSEARCH
#COBOL

Code looks like below.

       01  T1-DS-FDBK-TBL.
           05  T1-DS-FDBK-ENTRY  OCCURS  999 TIMES
                                     ASCENDING KEY IS T1-DS-FDBK-UNIT
                                     INDEXED BY T1-NDX.
               10  T1-DS-FDBK-UNIT         PIC X(4).
               10  T1-DS-FDBK-RPTIND       PIC X(1).

.

.

    SEARCH ALL T1-DS-FDBK-ENTRY
        AT END MOVE 'Y'                TO WS-FDBK-TO-RPT-SW
         WHEN T1-DS-FDBK-UNIT(T1-NDX) = WS-DIV-SUB
              MOVE T1-DS-FDBK-RPTIND(T1-NDX) TO WS-FDBK-TO-RPT-SW
    END-SEARCH.

I actually don't find any reason, why binary search would not be successful.


#COBOLSEARCH
#COBOL
I had a similar issue, not in Micro Focus Cobol, but with IBM Enterprise Cobol. The SEARCH ALL would fail to find entries that I knew were in the table. When I changed my code to an ordinary SEARCH, it worked fine.

Code looks like below.

       01  T1-DS-FDBK-TBL.
           05  T1-DS-FDBK-ENTRY  OCCURS  999 TIMES
                                     ASCENDING KEY IS T1-DS-FDBK-UNIT
                                     INDEXED BY T1-NDX.
               10  T1-DS-FDBK-UNIT         PIC X(4).
               10  T1-DS-FDBK-RPTIND       PIC X(1).

.

.

    SEARCH ALL T1-DS-FDBK-ENTRY
        AT END MOVE 'Y'                TO WS-FDBK-TO-RPT-SW
         WHEN T1-DS-FDBK-UNIT(T1-NDX) = WS-DIV-SUB
              MOVE T1-DS-FDBK-RPTIND(T1-NDX) TO WS-FDBK-TO-RPT-SW
    END-SEARCH.

I actually don't find any reason, why binary search would not be successful.


#COBOLSEARCH
#COBOL
SEARCH ALL executes a binary search. It will only work as expected on an ordered table.

Code looks like below.

       01  T1-DS-FDBK-TBL.
           05  T1-DS-FDBK-ENTRY  OCCURS  999 TIMES
                                     ASCENDING KEY IS T1-DS-FDBK-UNIT
                                     INDEXED BY T1-NDX.
               10  T1-DS-FDBK-UNIT         PIC X(4).
               10  T1-DS-FDBK-RPTIND       PIC X(1).

.

.

    SEARCH ALL T1-DS-FDBK-ENTRY
        AT END MOVE 'Y'                TO WS-FDBK-TO-RPT-SW
         WHEN T1-DS-FDBK-UNIT(T1-NDX) = WS-DIV-SUB
              MOVE T1-DS-FDBK-RPTIND(T1-NDX) TO WS-FDBK-TO-RPT-SW
    END-SEARCH.

I actually don't find any reason, why binary search would not be successful.


#COBOLSEARCH
#COBOL
Figured this. Data loaded in the table was ordered. However key initialized to default low-values, thus entire table is not ordered. Try to initialize key to high-values