Una opción que podemos utilizar tanto con OUTREC como con INREC es la de "justificar" a izquierda o derecha con JFY.
Os dejo a continuación un ejemplo de OUTREC para fichero de longitud fija FB y de longitud variable VB.
FICHERO DE ENTRADA:
+----1----+----2----+----3----+----4----+----5-
***************************** Top of Data *****
2015-01-01DATOS VARIABLES T 20
FFFF6FF6FFCCEDE4ECDCCCDCE44444E4FF4444444444444 20150010014136205199123520000030200000000000000 -----------------------------------------------
2015-01-01DATOS VARIABLES LARGO 40 FFFF6FF6FFCCEDE4ECDCCCDCE4DCDCD444FF44444444444 20150010014136205199123520319760004000000000000 -----------------------------------------------
2015-01-01DATOS VARIABLES MAS L 45
FFFF6FF6FFCCEDE4ECDCCCDCE4DCE4D44444444FF444444 20150010014136205199123520412030000000045000000 -----------------------------------------------
2015-01-01DATOS VARIABLES LARGO 51
FFFF6FF6FFCCEDE4ECDCCCDCE4DCDCD44444444444444FF
20150010014136205199123520319760000000000000051
-----------------------------------------------
Si os fijáis, de la posición 36 a la 51 tenemos un campo con diferente número de espacios a la izquierda del dato que nos interesa.
Para un fichero VB:
//PASO040 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=fichero_de_entradaVB,DISP=SHR
//SORTOUT DD DSN=fichero_de_salidaVB,
// DISP=(,CATLG),
// SPACE=(CYL,(150,75),RLSE)
//SYSIN DD *
SORT FIELDS=COPY
OUTREC OVERLAY=(40:40,16,JFY=(SHIFT=LEFT))
Le estamos indicando que en la posición 40 (36+4 porque es un VB) escriba el campo que está en la posición 40 ocupando 16, pero alineándolo a la izquierda. Y que deje el resto del registro igual (podéis ver más detalle en Sort vol.2.3: OUTREC. Ficheros VB).
El resultado:
+----1----+----2----+----3----+----4----+----5-
************************* Top of Data *********
2015-01-01DATOS VARIABLES T20
FFFF6FF6FFCCEDE4ECDCCCDCE44444EFF44444444444444
20150010014136205199123520000032000000000000000
-----------------------------------------------
2015-01-01DATOS VARIABLES LARGO40
FFFF6FF6FFCCEDE4ECDCCCDCE4DCDCDFF44444444444444
20150010014136205199123520319764000000000000000
-----------------------------------------------
2015-01-01DATOS VARIABLES MAS L45
FFFF6FF6FFCCEDE4ECDCCCDCE4DCE4DFF44444444444444
20150010014136205199123520412034500000000000000
-----------------------------------------------
2015-01-01DATOS VARIABLES LARGO51
FFFF6FF6FFCCEDE4ECDCCCDCE4DCDCDFF44444444444444
20150010014136205199123520319765100000000000000
Para un fichero de longitud fija:
//PASO040 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=fichero_de_entradaFB,DISP=SHR
//SORTOUT DD DSN=fichero_de_salidaFB,
// DISP=(,CATLG),
// SPACE=(CYL,(150,75),RLSE)
//SYSIN DD *
OPTION COPY
OUTREC FIELDS=(1:1,35,36:36,16,JFY=(SHIFT=LEFT))
Obteniendo el mismo resultado.
Si quisiésemos alinear a la derecha escribríamos SHIFT=RIGHT.
Mostrando entradas con la etiqueta INREC. Mostrar todas las entradas
Mostrando entradas con la etiqueta INREC. Mostrar todas las entradas
lunes, 8 de agosto de 2016
lunes, 20 de junio de 2011
SORT vol.6: INREC.
La estructura general de un SORT es la siguiente:
//SORT001 EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN DD DSN=nombre.fichero.entrada1,DISP=SHR
// DD DSN=nombre.fichero.entrada2(opcional),DISP=SHR
//SORTOUT DD DSN=nombre.fichero.salida1,
// DISP=(,CATLG,DELETE),SPACE=(CYL,(500,100))
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
…
…
PGM=SORT --> Indica el programa a utilizar, en este caso el SORT.
PARM=('DYNALLOC=(SYSALLDA,32)') --> Cantidad de memoria que se da a la ejecución del paso. Si se queda corto, aumentarla en valores de 8,12,32,64,128, 256 (como las memorias RAM)
SORTIN --> Ficheros de entrada
SORTOUT --> Ficheros de salida
SYSIN --> Indica el tipo de sort a realizar, las opciones disponibles son muchas y muy variadas, pudiendo utilizarse varias juntas en un mismo paso. Algunas de ellas son SORT, SUM, OMIT, INCLUDE, INREC, OUTREC, OUTFIL, OPTION … .
En este documento se explica en detalle algunas de estas funciones:
INREC
INREC FIELDS --> Toma los registros del fichero de entrada y los guarda formateados en el fichero de salida. A diferencia del OUTREC, el INREC modifica los registros de entrada antes de ordenarlos.
//SORT001 EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN DD DSN=nombre.fichero.entrada1,DISP=SHR
// DD DSN=nombre.fichero.entrada2,DISP=SHR
//SORTOUT DD DSN=nombre.fichero.salida1,
// DISP=(,CATLG,DELETE),SPACE=CYL,500,100))
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=...
INREC FIELDS=(I,L,D(opcional))
I – Inicio. Posición donde empieza el campo.
L – Longitud máxima del campo.
D – Dato a incluir (opcional).
Hay diferentes formas y ejemplos de utilizar el INREC, no voy a explicarlas pues se realizan del mismo modo que en el OUTREC (Ir al artículo):
- FORMATEO DE FICHEROS - Seleccionar y alterar los campos de los registros del fichero de entrada.
– CONVERSIÓN DE DATOS - Permite cambiar el formato de los campos. Se realiza del siguiente modo:
- CHANGE – Cambiar datos - Sustituir datos del fichero por otros.
- CONDICIONES - IFTHEN. Incluir condiciones
NOTA:La forma de codificar es la misma que en el OUTREC pero poniendo INREC. Lo único que se ha de tener en cuenta es acordarse que va a realizar la operación antes de ordenar el/los fichero/s de entrada. En algunas operaciones hay que tener en cuenta esta situación porque el resultado puede variar.
//SORT001 EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN DD DSN=nombre.fichero.entrada1,DISP=SHR
// DD DSN=nombre.fichero.entrada2(opcional),DISP=SHR
//SORTOUT DD DSN=nombre.fichero.salida1,
// DISP=(,CATLG,DELETE),SPACE=(CYL,(500,100))
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
…
…
PGM=SORT --> Indica el programa a utilizar, en este caso el SORT.
PARM=('DYNALLOC=(SYSALLDA,32)') --> Cantidad de memoria que se da a la ejecución del paso. Si se queda corto, aumentarla en valores de 8,12,32,64,128, 256 (como las memorias RAM)
SORTIN --> Ficheros de entrada
SORTOUT --> Ficheros de salida
SYSIN --> Indica el tipo de sort a realizar, las opciones disponibles son muchas y muy variadas, pudiendo utilizarse varias juntas en un mismo paso. Algunas de ellas son SORT, SUM, OMIT, INCLUDE, INREC, OUTREC, OUTFIL, OPTION … .
En este documento se explica en detalle algunas de estas funciones:
INREC
INREC FIELDS --> Toma los registros del fichero de entrada y los guarda formateados en el fichero de salida. A diferencia del OUTREC, el INREC modifica los registros de entrada antes de ordenarlos.
//SORT001 EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN DD DSN=nombre.fichero.entrada1,DISP=SHR
// DD DSN=nombre.fichero.entrada2,DISP=SHR
//SORTOUT DD DSN=nombre.fichero.salida1,
// DISP=(,CATLG,DELETE),SPACE=CYL,500,100))
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=...
INREC FIELDS=(I,L,D(opcional))
I – Inicio. Posición donde empieza el campo.
L – Longitud máxima del campo.
D – Dato a incluir (opcional).
Hay diferentes formas y ejemplos de utilizar el INREC, no voy a explicarlas pues se realizan del mismo modo que en el OUTREC (Ir al artículo):
- FORMATEO DE FICHEROS - Seleccionar y alterar los campos de los registros del fichero de entrada.
– CONVERSIÓN DE DATOS - Permite cambiar el formato de los campos. Se realiza del siguiente modo:
- CHANGE – Cambiar datos - Sustituir datos del fichero por otros.
- CONDICIONES - IFTHEN. Incluir condiciones
NOTA:La forma de codificar es la misma que en el OUTREC pero poniendo INREC. Lo único que se ha de tener en cuenta es acordarse que va a realizar la operación antes de ordenar el/los fichero/s de entrada. En algunas operaciones hay que tener en cuenta esta situación porque el resultado puede variar.
Suscribirse a:
Entradas (Atom)