
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.
|
|