Veamos cómo es el cruce de ficheros.
La estructura de un programa Cobol (o el cualquier otro lenguaje) suele ser:
INICIO
TRATAMIENTO hasta FIN-FICHERO-ENTRADA
FINAL
En el cruce tendríamos:
INICIO
TRATAMIENTO hasta FIN-FICHERO1 y FIN-FICHERO2
FINAL
En el párrafo INICIO tendríamos la primera lectura de ambos ficheros. En cada una de las lecturas se debe tener en cuenta lo siguiente:
- Si el file-status es 0 se debe mover la clave leída del fichero a CLAVE1 (si hemos leído del FICHERO1) o a CLAVE2 (si hemos leído del FICHERO2).
- Si el file-status es 10, no sólo hay que activar el correspondiente switch que indica que se ha llegado a final de fichero, sino que además hay que mover HIHG-VALUES a CLAVE1 (si hemos leído del FICHERO1) o a CLAVE2 (si hemos leído del FICHERO2).
En el párrafo TRATAMIENTO (que se ejecuta hasta que finalicen ambos ficheros) tendríamos la comparación de claves:
EVALUATE TRUE
WHEN CLAVE1 = CLAVE2
DISPLAY 'HAY CRUCE. CLAVE1: ' CLAVE1 '. CLAVE2: ' CLAVE2
PERFORM LEER-FICHERO2
WHEN CLAVE1 < CLAVE2
DISPLAY 'CLAVE1 no existe en FICHERO2'
PERFORM LEER-FICHERO1
WHEN CLAVE1 > CLAVE2
DISPLAY 'CLAVE2 no existe en FICHERO1'
PERFORM LEER-FICHERO2
WHEN OTHER
CONTINUE
END-EVALUATE
Nota: Se pone WHEN OTHER, aunque no llegue a ejecutarse nunca, por-
que por temas de calidad todo EVALUATE tiene que tener WHEN OTHER.
Espero que os sirva de ayuda si tenéis que hacer un programa de cruce en Cobol.