Desarrollando en Cobol y Natural sobre Plataforma Mainframe

jueves, 21 de mayo de 2015

Utilidad JCL ICEMAN para realizar SORT (1)

La utilidad ICEMAN de IBM para JCL es, básicamente, la versión moderna de la clásica utilidad DFSORT de Mainframe y, como tal, mantiene su misma funcionalidad. Por tanto, cada vez que tengamos la necesidad de ordenar los datos de un fichero para un programa Cobol, podremos recurrir indistintamente tanto a una como a otra.

Utilidad ICEMAN para ordenación de registros


La utilidad ICEMAN se usa para realizar la ordenación de los registros del fichero secuencial indicado y almacenar el resultado ordenado en un nuevo fichero. Aparte de esto, también puede ser empleada en una aplicación Cobol para realizar simples copias de ficheros o para unir el contenido de varios ficheros secuenciales.



Vamos a ver cómo funcionaría esta herramienta Mainframe con un ejemplo. Imaginemos que estamos trabajando con un fichero de poblaciones (denominado SISTEMA.UNLOAD.X0005X.POBL) en el que aparecen únicamente dos campos: el nombre de la ciudad y su código interno asociado. El contenido de dicho fichero es el siguiente.

***************************** Top of Data *****
000020-MADRID                   00000100     
000019-CIUDAD REAL              00000200     
000018-BARCELONA                00000300     
000017-VALENCIA                 00000400     
000015-ZARAGOZA                 00000600     
000014-CASTELLON                00000700     
000012-GRANADA                  00000900     
000011-TOLEDO                   00001000     
000010-SEGOVIA                  00001100     
000002-ALMERIA                  00001300     
000004-SANTANDER                00001500     
000005-TARRAGONA                00001600     
000006-BADAJOZ                  00001700     
000007-SALAMANCA                00001800     
000008-BURGOS                   00001900     
**************************** Bottom of Data ***


Como vemos, los registros mostrados no siguen ningún tipo de ordenación, ni por código ni por nombre. A continuación, en nuestro proyecto nos piden que generemos otro fichero secuencial en el que se muestren todas las ciudades ordenadas por su código interno. Para realizar esta tarea podemos (y vamos a) recurrir a la utilidad ICEMAN.

Recordemos, antes de continuar, que ICEMAN tiene que estar acompañada de un comando que le indique cuál es la acción que queremos ejecutar con la herramienta. Al igual que en el caso del DFSORT, los comandos disponibles son los siguientes.

- SORT: para ordenar los registros de un dataset.
- COPY: para realizar la copia de un fichero completo.
- MERGE: para unir dos ficheros en uno.


Ordenación de registros mediante SORT de ICEMAN


En nuestro caso, como nos han pedido ordenar un fichero secuencial, tendremos que recurrir al comando SORT de ICEMAN. A continuación, mostramos un ejemplo (no es la única solución posible) de cómo se podría implementar el JCL que resolviese el problema propuesto.

//PASO1   EXEC PGM=ICEMAN                             
//*           ****************************************
//*           * FICHERO DE ENTRADA SIN ORDENAR      
//*           ****************************************
//SYSOUT   DD  SYSOUT=*                             
//SORTIN   DD  DSN=SISTEMA.UNLOAD.X0005X.POBL,DISP=SHR
//*           ****************************************
//*           * FICHERO DE SALIDA ORDENADO          
//*           ****************************************
//SORTOUT  DD  DSN=SISTEMA.UNLOAD.X0005X.POBL.SORT, 
//             DISP=(,CATLG,DELETE),UNIT=DISCO,     
//             SPACE=(CYL,(00010,00010),RLSE)       
//SYSIN    DD  *                                    
  SORT FIELDS=(1,6,CH,A,8,25,CH,A),DYNALLOC=3390    
  SUM  FIELDS=NONE                                  
/*                                                  
//*
                                            

A continuación, pasamos a detallar en qué consiste cada una de las tarjetas codificadas en el párrafo anterior.

1º) Card SYSOUT: Aquí tenemos que especificar la ubicación en la que deseamos que se almacenen los mensajes generados durante la ejecución del proceso. La sentencia SYSOUT=* indica que estos mensajes deben enviarse al SPOOL (a la MSGCLASS provisionada en el JCL).

//SYSOUT   DD  SYSOUT=*

2º) Card SORTIN: Aquí se debe especificar el nombre del fichero secuencial origen sobre el que se debe realizar la ordenación de los registros. En el caso del ejemplo, se está indicando el fichero SISTEMA.UNLOAD.X0005X.POBL.

//SORTIN   DD  DSN=SISTEMA.UNLOAD.X0005X.POBL,DISP=SHR


3º) Card SORTOUT: Aquí tendremos que indicar el nombre que deberá tener el fichero de salida generado mediante el comando SORT. Junto al nombre, habrá que especificar las características con las que debe crearse el dataset.

//SORTOUT  DD  DSN=SISTEMA.UNLOAD.X0005X.POBL.SORT, 
//             DISP=(,CATLG,DELETE),UNIT=DISCO,     
//             SPACE=(CYL,(00010,00010),RLSE)
        


El próximo día, en un post adicional, continuaremos viendo la descripción de las tarjetas que deben acompañar a la utilidad si deseamos que ICEMAN proceda a ejecutar el comando SORT. Recordemos que, aparte de la ordenación SORT, esta herramienta también puede realizar las funciones de copiado y de unión.

Y nada más. Os emplazo a la segunda parte del artículo, donde completaremos la revisión de la estructura que debe implementar un comando SORT mediante ICEMAN.

Saludos.

1 comentario:

Related Posts Plugin for WordPress, Blogger...