martes, 2 de noviembre de 2010

Cruce 1-n: subiendo el nivel.

El programa de cruce 1-n se basa en el mismo proceso que el cruce 1-1. La diferencia está en que la clave del fichero 2 puede venir repetida n veces. Y como para muestra un botón, ahí va otro ejemplo:



En el INICIO del programa, leeremos el primer registro de cada fichero e informaremos los campos CLAVE1 y CLAVE2: CLAVE1 = 1; CLAVE2 = 1.

Repetiremos el proceso hasta llegar al final de alguno de los 2 ficheros.

a) CLAVE1 = CLAVE2:
Dentro de un bucle, hacemos el tratamiento que corresponda y leemos del fichero 2 hasta que cambie el valor del campo CLAVE2.

PERFORM UNTIL CLAVE2 <> CLAVE2-ANTERIOR(que valía 1)
Tratamiento de datos.
Leemos el siguiente registro del fichero 2 e informamos CLAVE2 con el siguiente valor.
Cuando lleguemos a CLAVE2 = 3 saldremos del bucle
END-PERFORM

b) Fuera del bucle(CLAVE2 ha cambiado, vale 3), leemos el siguiente registro del fichero 1:
CLAVE1 = 2.

c) CLAVE1 < CLAVE2:
Esto significa que la CLAVE1 no existe en el fichero 2. Leemos el siguiente registro del fichero 1.
CLAVE1 = 5. CLAVE2 sigue valiendo 3.

d) CLAVE1 > CLAVE2:
Esto significa que la CLAVE2 no existe en el fichero 1. Leemos el siguiente registro del fichero 2.
CLAVE1 = 5. CLAVE2 = 5.

La diferencia principal con el cruce 1-1 está en el caso a), pues ahora tendremos que tratar todos los registros del fichero 2 que tengan la misma clave antes de tratar el siguiente registro del fichero 1.

6 comentarios:

Álvaro dijo...

Hola Tallian!
Quería preguntarte si sabes algún sistema de cruce que se pueda hacerse desde jcl, sin necesidad de un programa. He oido algo de los easytrieve pero me parece bastante complicado. No se si existe una forma más simple.

Saludos!

Anónimo dijo...

Excelente articulo para aclarar las ideas siempre que tenemos que hacer algo de este tipo. Me parece que el ultimo leemos del paso b) debería ir en el paso c)

Seguid así :)

Anónimo dijo...

Cómo sería el procedimiento a seguir para un cruce 1-n entre 3 ficheros?

Loboc dijo...

Hola Anónimo, no nos queda muy clara tu pregunta. El 1-n significa que para cada registro del primer fichero existen n registros en el segundo, por lo que para tu duda de tres ficheros, necesitamos conocer si sería 1-n-n o 1-n-1. Te agradecemos que nos aclares tus dudas para poder ayudarte. Un saludo y gracias por leernos.

Anónimo dijo...

hola muchas gracias me ha servido bastante tu pagina y me quedo muy claro este match saludos.

ALEX dijo...

Como se puede hacer para que no se lean n registros en proceso del match ya sea 1-1 o 1-n