Búsqueda en librerías cobol

04/03/2022

Valoración: 3.90 (40 votos)

El lenguaje COBOL, a pesar de su antigüedad, sigue siendo relevante en sistemas empresariales. Una tarea fundamental en muchos programas COBOL es la búsqueda de datos dentro de estructuras de datos, comúnmente conocidas como tablas. Este artículo profundiza en las técnicas de búsqueda en COBOL, explicando los métodos lineales y binarios, y cómo optimizar estas operaciones para mejorar el rendimiento.

Temario

Tipos de Búsqueda en COBOL

Las búsquedas en COBOL se realizan principalmente a través de dos métodos:

  • Búsqueda Lineal (SEARCH): Este método recorre la tabla secuencialmente, elemento por elemento, hasta encontrar el dato buscado o llegar al final de la tabla. Es eficiente para tablas pequeñas o no ordenadas, pero su rendimiento disminuye significativamente con tablas grandes.
  • Búsqueda Binaria (SEARCH ALL): Este método es mucho más eficiente para tablas grandes y ordenadas. Funciona dividiendo la tabla repetidamente a la mitad, descartando la mitad que no contiene el dato buscado. Esto reduce drásticamente el número de comparaciones necesarias.

Búsqueda Lineal (SEARCH) en COBOL

La instrucción SEARCHse utiliza para realizar una búsqueda lineal. Es importante recordar que SEARCHsolo funciona con tablas indexadas (declaradas con la cláusula INDEXED BY). Veamos un ejemplo:

IDENTIFICATION DIVISION.PROGRAM-ID. BUSQUEDA-LINEAL.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-TABLA. 05 WS-ELEMENTO PIC 9(3) OCCURS 10 TIMES INDEXED BY I.01 WS-BUSCADO PIC 9(3).PROCEDURE DIVISION. MOVE 100 TO WS-BUSCADO. PERFORM 100-INICIALIZAR-TABLA. SET I TO SEARCH WS-TABLA AT END DISPLAY 'ELEMENTO NO ENCONTRADO' WHEN WS-ELEMENTO(I) = WS-BUSCADO DISPLAY 'ELEMENTO ENCONTRADO EN LA POSICION: ' I END-SEARCH. STOP RUN.100-INICIALIZAR-TABLA. PERFORM VARYING J FROM 1 BY 1 UNTIL J > 10 MOVE J  10 TO WS-ELEMENTO(J) END-PERFORM.

En este ejemplo, la instrucción SEARCHitera a través de WS-TABLAhasta encontrar el valor en WS-BUSCADOo llegar al final de la tabla. La cláusula AT ENDmaneja el caso donde el elemento no se encuentra. La cláusula WHENespecifica la condición para detener la búsqueda.

Optimizando la Búsqueda Lineal

Para mejorar la eficiencia de la búsqueda lineal, se recomienda:

  • Ordenar la tabla: Si es posible, ordenar la tabla antes de realizar la búsqueda puede ayudar a encontrar elementos rápidamente, aunque no se utiliza un algoritmo de búsqueda binaria.
  • Utilizar tablas hash: Para búsquedas muy frecuentes, una tabla hash puede ser una alternativa más eficiente que una búsqueda lineal. Sin embargo, esto requiere una implementación más compleja.

Búsqueda Binaria (SEARCH ALL) en COBOL

La instrucción SEARCH ALLrealiza una búsqueda binaria. Requiere que la tabla esté previamente ordenada (usando la cláusula ASCENDING KEYo DESCENDING KEYen la declaración de la tabla). Esta técnica es significativamente más rápida que la búsqueda lineal para tablas grandes.

IDENTIFICATION DIVISION.PROGRAM-ID. BUSQUEDA-BINARIA.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-TABLA. 05 WS-REGISTRO OCCURS 10 TIMES ASCENDING KEY IS WS-CLAVE INDEXED BY I. 10 WS-CLAVE PIC 9(3). 10 WS-DATOS PIC X(20).01 WS-BUSCADO PIC 9(3).PROCEDURE DIVISION. MOVE 70 TO WS-BUSCADO. PERFORM 100-INICIALIZAR-TABLA. SEARCH ALL WS-TABLA AT END DISPLAY 'ELEMENTO NO ENCONTRADO' WHEN WS-CLAVE(I) = WS-BUSCADO DISPLAY 'ELEMENTO ENCONTRADO: ' WS-REGISTRO(I) END-SEARCH. STOP RUN.100-INICIALIZAR-TABLA. PERFORM VARYING J FROM 1 BY 1 UNTIL J > 10 MOVE J  10 TO WS-CLAVE(J) MOVE 'DATOS-' J TO WS-DATOS(J) END-PERFORM.

En este caso, SEARCH ALLaprovecha la ordenación de WS-TABLApara realizar la búsqueda binaria, lo que resulta en un rendimiento significativamente superior para conjuntos de datos grandes.

Consideraciones para la Búsqueda Binaria

Para utilizar SEARCH ALLde manera eficaz:

buscar en una libreria cobol - Qué es la búsqueda lineal en Cobol

  • Tabla ordenada: La tabla debe estar estrictamente ordenada según la clave especificada en la cláusula ASCENDING KEY o DESCENDING KEY .
  • Mantenimiento del orden: Al agregar o eliminar elementos de la tabla, se debe mantener el orden para asegurar la correcta funcionalidad de la búsqueda binaria.

Tabla Comparativa de Métodos de Búsqueda

Método Complejidad Temporal Requiere Tabla Ordenada Eficiencia
Búsqueda Lineal (SEARCH) O(n) No Baja para tablas grandes
Búsqueda Binaria (SEARCH ALL) O(log n) Alta para tablas grandes

Consultas Habituales sobre la Búsqueda en COBOL

A continuación, se responden algunas consultas habituales sobre la búsqueda de datos en COBOL:

buscar en una libreria cobol - Qué es la búsqueda en Cobol

  • ¿Cuál es la diferencia entre SEARCH y SEARCH ALL? SEARCH realiza una búsqueda lineal, mientras que SEARCH ALL realiza una búsqueda binaria (mucho más eficiente para tablas grandes y ordenadas).
  • ¿Qué sucede si el elemento buscado no se encuentra? La cláusula AT END en ambas instrucciones maneja este escenario, permitiendo ejecutar un código específico cuando no se encuentra el elemento.
  • ¿Cómo se manejan las tablas multidimensionales? Las búsquedas en tablas multidimensionales requieren un enfoque más complejo, generalmente utilizando bucles anidados para recorrer cada dimensión.
  • ¿Existen otras técnicas de búsqueda en COBOL? Si bien SEARCH y SEARCH ALL son las más comunes, se pueden implementar otras técnicas de búsqueda como la búsqueda indexada o el uso de tablas hash para mejorar el rendimiento en casos específicos.

La elección del método de búsqueda en COBOL depende del tamaño de la tabla, si está ordenada o no y de la frecuencia con la que se realizan las búsquedas. Para tablas grandes y ordenadas, SEARCH ALLes la opción más eficiente. Para tablas pequeñas o no ordenadas, SEARCHpuede ser suficiente. Comprender estas diferencias es crucial para optimizar el rendimiento de las aplicaciones COBOL.

Si quieres conocer otros artículos parecidos a Búsqueda en librerías cobol puedes visitar la categoría Libros y Librerías.

Subir