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.
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.
- 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.
//* ****************************************
//* * 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.
// DISP=(,CATLG,DELETE),UNIT=DISCO,
// SPACE=(CYL,(00010,00010),RLSE)
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.
ESTA MUY EXPLICITO EL ARTICULO GRACIAS MIL
ResponderEliminar