Desarrollando en Cobol y Natural sobre Plataforma Mainframe

lunes, 7 de septiembre de 2015

ICETOOL: Como copiar ficheros en JCL (y 2)

Hace algunas semanas comenzamos a ver la forma en la que se podía implementar, en un JCL, una copia de ficheros mediante la herramienta ICETOOL. Ya sabemos que existen métodos alternativos para realizar dicha función, pero hemos de tener en cuenta que el uso de esta utilidad de ICEMAN nos permitiará realizar copias de una de las maneras más eficientes del mundo Host.

En la primera parte del artículo empezamos a ver cuáles son las fichas que tenemos que incluir en el JCL de copia de ficheros (ver post ICETOOL - Como copiar ficheros en JCL - 1). A continuación, terminaremos de revisar cuáles son los pasos que debemos incluir en la implementación de nuestro proceso.

5º) Fichas de CONTROL CTL1 y CTL2: En estas fichas tendremos que indicar cuáles son las condiciones con las que debe realizarse la copia y el formateo de los ficheros de salida (en particular, aquí se apunta a los objetos FICTL1 y FICTL2).

A) Ficha CTL1: En la ficha CTL1 se indica cómo debe copiarse el fichero IN1 al fichero OUT1.

* <<< FICHA CONTROL FICTL1 >>>                      
  SORT FIELDS=(1,4,PD,A,5,2,PD,A)                                   
  OUTREC FIELDS=(1,21,193X,215:C'D',9,6)  

Esta ficha de control está indicando lo siguiente:

- SORT: Que se ordenen los registros de IN1 en función de la información contenida en los campos (1,4,PD,A) y (5,2,PD,A).

- OUTREC: Una vez realizada la ordenación, se transfieren al fichero de salida las primeras 21 posiciones del fichero de entrada (1,21), luego se añaden 193 espacios en blanco (193X), luego se añade el literal 'D' (215:C'D') y finalmente se incorpora el campo de 6 posiciones que empieza en la posición 9 de IN1 (9,6).



B) Ficha CTL2: En la ficha CTL2 se indica cómo debe copiarse el fichero IN2 al fichero OUT2.

* <<< FICHA CONTROL FICTL2 >>>
  INREC FIELDS=(1,6,1,208)                                          
  SORT FIELDS=(1,4,PD,A,5,2,PD,A)                                   
  OUTREC FIELDS=(1,214,215:C' ',6X)

Esta ficha de control está indicando lo siguiente:

- INREC: Que se creen registros en los que se inserte, en primer lugar, el campo de longitud 6 que empiece en la posición 1 del IN2 (1,6) y, en segundo lugar, el campo de longitud 208 que empieza en la posición 1 de IN2 (1,208).

- SORT: A continuación, se deben ordenar los registros en función de la información contenida en los campos (1,4,PD,A) y (5,2,PD,A).

- OUTREC: Finalmente, se transfiere al fichero de salida OUT2 el campo de longitud 214 que empieza en la posición 1, luego se añade un espacio en blanco (215:C' ') y finalmente se completa con 6 espacios en blanco (6X).



Ejecución de la función COPY de ICETOOL


Una vez informadas todas las fichas anteriores, la ejecución del paso JCL con la utilidad ICETOOL no debería darnos ningún problema. El proceso acabará con la ejecución del operador COPY, que trasladará la información desde los ficheros de entrada hasta los ficheros de salida, según las condiciones especificadas en las fichas de control.

En el caso de nuestro ejemplo, los registros irán desde los datasets &INDICE2..JJTV10K1.X0007X.DDD.F&FECHA..COMP3 y &INDICE1..UNLOAD.X0005X.&DIA..&TABLA hasta los destinos &INDICE1..JJ4605S1.X0060X.DDD.F&FECHA..&TAB..T1 y &INDICE1..JJ4605S2.X0060X.DDD.F&FECHA..&TAB..T2. Eso sí, los registros de origen aparecerán reformateados en los registros de destino, ya que indicamos varios cambios tanto en la ficha de Control 1 como en la ficha de Control 2.


Como vemos, el operador COPY nos sirve para realizar varias cosas a la vez. En el ejemplo, hemos realizado la copia de dos ficheros origen en dos ficheros destino. Pero, además, hemos insertado datos al comienzo de los registros de entrada (INREC), hemos ejecutado una ordenación de los registros (SORT) y, finalmente, hemos indicado cuáles son los campos que deben transferirse a los registros de salida (OUTREC). ¿Con qué otra utilidad podemos realizar tantas cosas a la vez?

Conclusiones sobre el operador COPY de ICETOOL


Tal y como hemos visto al principio, como programadores Cobol tenemos diferentes opciones para realizar copias de ficheros origen a ficheros destino. Desde las herramientas clásicas como IEBGENER o DFSORT, hasta otras más eficientes y modernas como ICEGENER o la que hemos visto en el post de hoy, ICETOOL.


Desde mi punto de vista, aunque al principio nos pueda parecer algo extraña su codificación, la implementación de esta operativa mediante ICETOOL de ICEMAN es la mejor alternativa que podemos escoger. Si nos esforzamos un poco al principio en aprender a usarla, a largo plazo ahorraremos mucho tiempo a la hora de codificar y ejecutar los JCL que empleamos para copiar ficheros.

Si implementamos el COPY de ICETOOL especificando las fichas de la forma comentada a lo largo del artículo, no deberíamos tener problemas a la hora de lanzar el job. Además, en caso de error, lo más importante es que hayamos entendido para qué sirve cada uno de los apartados del proceso y que no nos conformemos con hacer un copy-paste del código publicado en el blog. De esta manera, seremos capaces de subsanar cualquier ABEND sin dificultad.



Os digo esto último porque es algo bastante tentador y que a mi me estuvo pasando durante algún tiempo. La verdad es que era mucho más rápido y sencillo entrar en un foro, copiar el código del JCL en mi librería y ejecutarlo sin más. El problema venía cuando el job fallaba y yo no tenía muy claro qué es lo que hacía cada parte del proceso: así no había forma de corregir los errores. Hoy en día, siempre intento entender cada ficha antes de ejecutar un JCL. Creedme, al final se acaba ganando tiempo.

Pues nada, esto es todo lo que quería comentaros con respecto a la utilización del comando COPY de la utilidad ICETOOL de ICEMAN. Como ya sabéis, podéis dejarme cualquier duda que os surja en el apartado de comentarios. Os responderé lo antes posible.

Saludos.

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...