viernes, 24 de abril de 2015

Unión de ficheros "a lo ancho" con Easytrieve

En muchas ocasiones nos habéis preguntado como unir dos ficheros con JCL de la siguiente forma:

Fichero 1       Fichero 2
aaaaa           xxxxx
bbbbb           yyyyy
ccccc           zzzzz

Unión de los dos ficheros
aaaaaxxxxx
bbbbbyyyyy
ccccczzzzz


Una solución para aquellos que dispongáis de Easytrieve sería usar un paso sencillo como este:

//CONSULL JOB (EASY),'easy',CLASS=A,MSGCLASS=X,
//      MSGLEVEL=(1,1),REGION=0M,COND=(4,LT)
//JOBLIB   DD  DSN=LIB.EJECUCION.EJEM,DISP=SHR
//****************************************************
//* OBTIENE REGISTRO DE CONTRIOL DE TRANSMISION      *
//****************************************************
//EASY0001 EXEC PGM=EZTPA00

//SYSOUT   DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//EZTVFM   DD UNIT=SYSDA,SPACE=(CYL,(40,10))
//ENTRADA1 DD DSN=FICHERO.ENTRADA.NUMERO1,DISP=SHR
//ENTRADA2 DD DSN=FICHERO.ENTRADA.NUMERO2,DISP=SHR           
//SALIDA   DD DSN=FICHERO.SALIDA.EASY,           
//            DISP=(,CATLG,DELETE),                           
//            SPACE=(CYL,(150,50),RLSE),    
//            DCB=(RECFM=FB,LRECL=200,BLKSIZE=0)
//SYSIN    DD *                             
FILE ENTRADA1
           ENTRADA1-TS     1      100      A
*                                           
FILE ENTRADA2                               
           ENTRADA2-TS     1      100      A
*                                           
FILE SALIDA                                 
           SALIDA-TS1      1      100      A
           SALIDA-TS2    101      200      A
*                                           
JOB INPUT NULL                              
      GET ENTRADA1                          
      GET ENTRADA2                          
      DO WHILE (NOT EOF ENTRADA1)           
          SALIDA-TS1 = ENTRADA1-TS          
          SALIDA-TS2 = ENTRADA2-TS          
          PUT SALIDA                        
          GET ENTRADA1                      
          GET ENTRADA2                      
      END-DO  
          STOP  




En este JOB podéis ver que el programa que se ejecuta es el  EZTPA00. Este programa es el compilador de easytrieve.

Será en la sysin donde incluiremos el código easytrieve propiamente dicho:
En primer lugar declaramos los ficheros de entrada ENTRADA1 y ENTRADA2 de longitud 100 en ambos casos. Definimos también el fichero de salida SALIDA como la suma de los 2, en total 200 posiciones de longitud.
En segundo lugar escribimos el código del programa:
Leer fichero: con la instrucción GET.
Escribir en el fichero de salida: con la instrucción PUT.

Lo hacemos dentro de un bucle donde vamos informando el área de salida, escribimos y leemos el siguiente registro de ambos ficheros.

Y listo! Nuestro paso de JCL nos ha ahorrado un programa cobol : )

Se os ocurren otras formas de hacerlo? Esperamos sugerencias!


No hay comentarios: