Hay dos formas en las que podemos realizar las operaciones de búsqueda en COBOL, primero utilizando el método tradicional, es decir, aplicando el bucle con la ayuda de la instrucción PERFORM, o utilizando los verbos predefinidos: SEARCH y SEARCH ALL. Los verbos BUSCAR y BUSCAR TODOS se pueden usar solo en los ARCHIVOS INDEXADOS porque usan la variable indexada asociada con el archivo.
SEARCH VERB realiza una búsqueda lineal en el registro/arreglo mientras que SEARCH ALL VERB realiza la búsqueda binaria en el registro/arreglo.
Búsqueda
El verbo Buscar en COBOL se puede usar para realizar búsquedas lineales, usando nombres de tablas como índices.
Sintaxis:
SEARCH {TableName} [VARYING {IndexName}] [AT END Code1] {WHEN condition {Code2} {NEXT SENTENCE } [END-SEARCH]
Ejemplo:
WORKING-STORAGE SECTION. 77 N PIC 99. 77 SEARCHRNO PIC 99. 01 ARRAY. 02 ARR OCCURS 10 TIMES ASCENDING KEY IS RNO INDEXED BY I. 03 RNO PIC 99. PROCEDURE DIVISION. //AFTER ENTERING THE ELEMENTS IN ARRAY //WE SEARCH THE ROLL NUMBER ENTERED //BY USER IN VARIABLE SEARCHRNO. SET I TO 1. SEARCH ARR AT END DISPLAY "NOT FOUND" WHEN RNO(I) = SEARCHRNO DISPLAY "FOUND ROLL NUMBER". STOP RUN.
Salida 1: Para buscar el elemento que realmente pertenece a una array.
Salida 2: Para buscar el elemento que no pertenece a una array.
Busca todo
El verbo Buscar todo en COBOL se usa para realizar una búsqueda binaria en COBOL usando los índices (nombre de la tabla).ntax
Sintaxis:
SEARCH ALL {TableName} [VARYING {IndexName}] [AT END Code1] {WHEN condition {Code2} {NEXT SENTENCE } [END-SEARCH]
Ejemplo:
WORKING-STORAGE SECTION. 77 SEARCHRNO PIC 99. 77 N PIC 99. 01 ARRAY. 02 ARR OCCURS 10 TIMES ASCENDING KEY IS RNO INDEXED BY I. 03 RNO PIC 99. PROCEDURE DIVISION. //AFTER ENTERING THE ELEMENTS IN ARRAY //WE SEARCH THE ROLL NUMBER ENTERED //BY USER IN VARIABLE SEARCHRNO. SEARCH ALL ARR AT END DISPLAY "NOT FOUND ROLL NUMBER" WHEN RNO(I) = SEARCHRNO DISPLAY "FOUND ROLL NUMBER". STOP RUN.
Salida: 1: Para buscar el elemento que realmente pertenece a una array.
Salida 2: Para buscar el elemento que no pertenece a una array.
Diferencia entre Buscar y Buscar todo:
La siguiente tabla tiene todas las principales diferencias entre Buscar y Buscar todo:
BÚSQUEDA |
BUSCA TODO |
---|---|
El verbo SEARCH se utiliza para realizar una búsqueda lineal en COBOL. | El verbo SEARCH ALL se utiliza para realizar búsquedas binarias en COBOL. |
Para esto, no se requiere que la array esté en forma ordenada. | Para esto, la array debe estar en orden ordenado (ya sea ascendente o descendente). |
Realiza operaciones de búsqueda secuencialmente y también se conoce como búsqueda secuencial. | Realiza operaciones de búsqueda comparando el elemento con el elemento central de la array, divide la array en dos mitades y continúa el proceso hasta que se encuentra el elemento. |
Realiza operaciones lentas y es menos eficiente. | Realiza una operación rápida y es más eficiente. |
Se puede utilizar en arrays individuales y multidimensionales. | Solo se puede usar en arreglos unidimensionales. |
Se pueden aplicar múltiples condiciones para buscar utilizando el CUÁNDO. | Solo se puede aplicar una condición de igualdad. |
El valor del identificador-1 debe inicializarse antes que el verbo SEARCH usando el verbo SET. | No hay necesidad de usar el verbo SET antes del verbo SEARCH ALL y, por lo tanto, el incremento se realiza automáticamente. |