Desarrollando en Cobol y Natural sobre Plataforma Mainframe

lunes, 27 de julio de 2015

Utilidad ICETOOL para JCL. ¿Cómo usarla? (1)

La utilidad ICETOOL es una aplicación que se distribuye junto con la herramienta ICEMAN. Se trata de un servicio que es capaz de aprovechar las propiedades y las funciones de DFSORT para ejecutar, en un único paso de JCL, múltiples operaciones sobre varios ficheros secuenciales. Dicho esto, entiendo que no es necesario hacer demasiado hincapié en el considerable ahorro de tiempo que conlleva su empleo.

¿Para qué sirve la utilidad ICETOOL de ICEMAN?


La utilidad ICETOOL nos permite realizar las mismas funciones que las herramientas ICEMAN y DFSORT, pero usando un menor número de pasos en el JCL. Puede que, en un principio, las sentencias ICETOOL nos parezcan menos intuitivas que las de un DFSORT pero, una vez nos hayamos acostumbrado a su empleo, el ahorro de tiempo y de código será considerable.

Aunque, en general, se utiliza para realizar ordenaciones y cruces de registros de ficheros secuenciales, en realidad esta utilidad puede ejecutar muchas funciones más. En total, ICETOOL dispone de 17 operadores que, además, pueden ser usados en combinación unos con otros.



Los operadores mencionados serían los siguientes: COPY, COUNT, DATASORT, DEFAULTS, DISPLAY, MERGE, MODE, OCCUR, RANGE, RESIZE, SELECT, SORT, SPLICE, STATS, SUBSET, UNIQUE y VERIFY. Obviamente, no todos tienen la misma importancia y, de hecho, algunos de ellos no los vamos a usar prácticamente nunca.

Operadores principales de la utilidad ICETOOL


A continuación, vamos a hacer un repaso de los operadores ICETOOL que, según mi opinión, son los más importantes. Aunque (tal y como he dicho antes) tenemos 17 funciones disponibles, muchas de ellas sólo las he usado una vez en mi vida como programador Cobol. Por tanto, no merece la pena dedicar demasiado tiempo a examinarlas.

La lista de los principales operadores ICETOOL de la herramienta ICEMAN (esto es, los que yo empleo más a menudo) es la siguiente.

- Operador COPY: Este comando permite copiar la información de un fichero de entrada a uno o varios ficheros de salida (algo similar, pero más potente, a lo que hace la utilidad IEBCOPY). Esta copia se realiza siguiendo las condiciones especificadas en una ficha de Control definida por nosotros. Un ejemplo del uso de este operador sería el siguiente. 

*------------------------------------------------------
* <<< OPERADOR COPY >>>                               
* COPIA CONTENIDO DEL FICHERO ENTRADA AL FICHERO SALIDA
* LAS CONDICIONES SE INDICAN EN LA FICHA CONTROL
*------------------------------------------------------
  COPY FROM(ENTRADA) TO(SALIDA) USING(CONTROL)    

*------------------------------------------------------
* <<< FICHA CONTROL DE COPY >>>              
* CONDICIONES PARA REALIZAR LA FUNCION COPY
*------------------------------------------------------
  INREC FIELDS=(43,6,1,88)        
  SORT FIELDS=(1,4,PD,A,5,2,PD,A) 
  OUTREC FIELDS=(1,432,433:C' ',6X)
       


- Operador COUNT: Este comando sirve para contar los registros existentes en un fichero de entrada y generar un fichero de salida en el que se imprima el texto que indiquemos y el resultado del contador. Al igual que en el caso anterior, esta acción se realiza cumpliendo las condiciones que especifiquemos en la ficha de Control. 

*------------------------------------------------------
* <<< OPERADOR COUNT >>>         
* CUENTA REGISTROS DEL FICHERO ENTRADA E IMPRIME EL
* RESULTADO EN EL FICHERO SALIDA
*------------------------------------------------------
  COUNT FROM(ENTR) USING(CTRL) WRITE(SALI) TEXT('CONT: ')

*------------------------------------------------------
* <<< FICHA CONTROL DE COUNT >>>           
* CONDICIONES PARA REALIZAR LA FUNCION COUNT
*------------------------------------------------------
  INCLUDE COND=(420,1,CH,EQ,C'.')

- Operador MERGE: Este comando sirve para tomar varios ficheros de entrada y unirlos en un fichero de salida. Esta unión se realizará siguiendo las condiciones indicadas en la ficha de control asociada.

- Operador SORT: Este operador sirve para ejecutar la ordenación de los registros de un fichero de entrada y enviar el resultado a uno o varios ficheros de salida. Esta función sería análoga al SORT realizado por las herramientas DFSORT o ICEMAN, una de las operaciones utilizadas más frecuentemente en el mundo JCL. 

*------------------------------------------------------
* <<< OPERADOR SORT >>>         
* ORDENA REGISTROS DEL FICHERO ENTRADA Y ENVIA EL
* RESULTADO AL FICHERO SALIDA
*------------------------------------------------------
  SORT FROM(ENTR) TO (SALI) USING(CTLR)

*------------------------------------------------------
* <<< FICHA CONTROL DE SORT >>>           
* CONDICIONES PARA REALIZAR LA FUNCION SORT
*------------------------------------------------------
  SORT FIELDS=(1,4,PD,A,5,2,PD,A),DYNALLOC=3390    
  SUM  FIELDS=NONE


- Operador SPLICE: Se trata del operador más polivalente de ICETOOL. Este comando permite cruzar entre sí los registros de un fichero de entrada y realizar operaciones de filtrado, de unión o de coincidencia a partir de los campos de los mismos. Los registros de la entrada pueden proceder de la concatenación de varios ficheros origen y el resultado puede depositarse en uno o varios ficheros de salida.

Los registros a cruzar deben tener la misma longitud y el mismo formato/estructura de campos, pero pueden contener diferente información. Dichos campos podrán ser combinados de la forma que deseemos para generar un nuevo registro de salida. Las condiciones del SPLICE se deberán indicar en la ficha de control asociada.

En el código siguiente podemos ver un ejemplo de SPLICE. Se recogen los registros del fichero de entrada CONCAT y el resultado se deposita en el fichero de salida SALI. En las cláusulas ON indicamos las posiciones de los campos por los que se tiene que realizar el cruce de los registros. En la cláusula WITH se indican las posiciones de los registros del fichero de entrada que deben ser transferidas al fichero de salida. Finalmente, las condiciones del cruce del SPLICE se especifican, como siempre, en la ficha CONTROL asociada. 

*------------------------------------------------------
* <<< OPERADOR SPLICE >>>
* CRUZA LOS REGISTROS DEL FICHERO CONCAT Y EL RESULTADO         
* FILTRADO SE DEPOSITA EN EL FICHERO SALI
*------------------------------------------------------
  SPLICE FROM(CONCAT) TO(SALI) ON(1,4,PD) ON(5,2,PD) -
  WITHALL WITH(1,110) USING(CONTROL)

*------------------------------------------------------
* <<< FICHA CONTROL DE SPLICE >>>                         
* CONDICIONES PARA REALIZAR LA FUNCION SPLICE
*------------------------------------------------------
  OUTFIL FNAMES=OUT,
  INCLUDE=(111,1,CH,EQ,C'D'),
  OUTREC=(112,6,7,55,62:C'&',88,23)



Tal y como hemos dicho al principio, en total ICETOOL dispone de 17 funciones asociadas pero, a la hora de la verdad, las indicadas anteriormente son las que se suelen emplear en el día a día. Eso sí, no viene mal saber que tenemos otras opciones disponibles, por si en algún momento nos hacen falta.

Una vez vistos los operadores principales, el próximo día (en un nuevo post) trataremos de ver algo más práctico. La idea será revisar, mediante un ejemplo, de qué forma habría que codificar un paso estándar de JCL para ejecutar un operador de ICETOOL.

Pues nada, quedáis emplazados a la segunda parte de la explicación. Espero que, entre ambos post, la cosa quede lo suficientemente clara como para que podáis empezar a usar la herramienta en alguno de vuestros JCL.

Saludos.

1 comentario:

Related Posts Plugin for WordPress, Blogger...