Busqueda de Cadenas
Este truco es muy práctico y con el vamos a poder buscar dentro de los campos alfanuméricos, cadenas de datos que concuerden con lo que buscamos.

Yo lo utilizo para buscar asientos dentro de mi programa de contabilidad y os tengo que decir que el resultado es muy bueno. Para ello vamos a definir unas variables y dos tablas. En las variables guardaremos las posiciones desde y donde vamos a buscar y nos servirán como subíndices de las tablas. La técnica consiste en ir cogiendo nuestro campo por partes iguales a la cadena que buscamos e ir comparando. Veamos como realizarlo:

...
WORKING-STORAGE SECTION.
01   CADENA  PIC X(30).
(cadena a buscar).
01   MIRAC    PIC X(30).
01   MIROC    REDEFINES MIRAC.
      02   MC  PIC X OCCURS 30 TIMES.
(tabla que contendrá el campo donde buscaremos).
01   VALIC    PIC X(30).
01   VALOC   REDEFINES VALIC.
      02   VC  PIC X OCCURS 30 TIMES.
(tabla en la que nos apoyaremos para buscar).
01   P1        PIC 99.
01   P2        PIC 99.
01   P3        PIC 99.
01   P4        PIC 99.
01   TOPE    PIC 99.
...

PROCEDURE DIVISION.
INICIO.
...
(Partimos de que previamente hemos aceptado el campo CADENA, que contendrá precisamente eso, lo que deseamos buscar).
(La variable TOPE, tendrá la longitud de la cadena a buscar).
...
DIEZ.
(Suponemos que vamos a buscar en un fichero que se llama ARTICULOS).
     READ ARTICULOS NEXT RECORD AT END GO FIN.
(y que dispone de un campo para el nombre llamado ARTNOM).
     MOVE 0 TO P1 P2. 
     MOVE ARTNOM TO MIRAC.
(Movemos el nombre a la tabla).
     COMPUTE P4 = 30 - TOPE. (Calculamos hasta donde debemos de buscar, teniendo en cuenta que el campo NOMBRE tiene de longitud 30).

ONCE.
     INITIALIZE VALIC P2.
DOCE.
(Aquí vamos moviendo nuesto campo CADENA, por todas las posibilidades posibles).
     ADD 1 TO P2 IF P2 > TOPE GO TRECE.
     COMPUTE P3 = P1 + P2.
     MOVE MC (P3) TO VC (P2).
     GO DOCE.
TRECE.
(Aquí comparamos cada resultado con nuestra CADENA).
     IF CADENA = VALIC DISPLAY SPACES LINE 22 COL 33 
         SIZE 40 GO CATORCE.
(Hemos encontrado una coincidencia y nos vamos a CATORCE).
     ADD 1 TO P1 IF P1 > P4 NEXT SENTENCE ELSE GO ONCE.
     GO DIEZ.
CATORCE.
(Aquí haremos lo que corresponda al encontrar lo que buscabamos).
     ...
Lo que voy a hacer, para que se pueda ver mas claro, es ponerlo en la sección de Programando, dentro del programa paso a paso, y así lo podréis ver de una forma mas lógica.



Este artículo proviene de Cobol en español
http://www.escobol.com

La dirección de esta noticia es:
http://www.escobol.com/modules.php?name=Sections&op=viewarticle&artid=86