ACTUALIZADO: añadido ejemplo de OPTION SKIPREC para saltarnos registros a la hora de ordenar.
//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:
OPTION SKIPREC
Sirve para saltar registros a la hora de escribir/ordenar un fichero de salida. Se salta tantos registros del fichero de entrada como se indiquen y a partir de ahí escribe en la salida/ordena.
Ejemplo de copy:
//SORT001 EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN DD DSN=nombre.fichero.entrada1,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=COPY
OPTION SKIPREC=número_de_registros_a_saltar
Por ejemplo, tenemos un fichero de entrada con 100 registros, si indicamos "OPTION SKIPREC=20", en el fichero de salida escribirá los registros comprendidos entre 21 y 100 ambos inclusive.
Ejemplo de sort:
//SORT001 EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN DD DSN=nombre.fichero.entrada1,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=(1,10,C,A)
OPTION SKIPREC=número_de_registros_a_saltar
Por ejemplo, cuando tenemos un fichero que lleva una cabecera en el primer registro (el primer registro tiene un formato distinto al resto del fichero), podemos saltarnos ese primer registro en la ordenación indicando "OPTION SKIPREC=1".
//SORT001 EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN DD DSN=nombre.fichero.entrada1,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=(1,10,C,A)
OPTION SKIPREC=número_de_registros_a_saltar
Por ejemplo, cuando tenemos un fichero que lleva una cabecera en el primer registro (el primer registro tiene un formato distinto al resto del fichero), podemos saltarnos ese primer registro en la ordenación indicando "OPTION SKIPREC=1".
Los registros saltados son eliminados y se ordenarán los registros del 2 en adelante.
NOTA: si queremos guardarnos todos los registros podemos usar OUTFIL con STARTREC y ENDREC.
OPTION STOPAFT
Sirve para dejar de escribir en salida una vez llegado al número de registros indicado.
//SORT001 EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN DD DSN=nombre.fichero.entrada1,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=COPY
OPTION STOPAFT=número_de_registro_que_para
Por ejemplo, tenemos un fichero de entrada con 100 registros, si indicamos "OPTION STOPAFT=30", nos escribirá en salida los registros comprendidos entre 1 y 30, ambos inclusive.
OPTION SKIPREC/STOPAFT
Se pueden combinar ambas utilidades del siguiente modo:
OPTION SKIPREC=número_de_registros_a_saltar,
STOPAFT=número_de_registro_que_para
Por ejemplo, tenemos un fichero de 100 registros, y queremos grabar en salida los comprendidos entre el 30 y 40 ambos inclusive. El método sería el siguiente:
OPTION SKIPREC=29,STOPAFT=11
OPTION STOPAFT
Sirve para dejar de escribir en salida una vez llegado al número de registros indicado.
//SORT001 EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN DD DSN=nombre.fichero.entrada1,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=COPY
OPTION STOPAFT=número_de_registro_que_para
Por ejemplo, tenemos un fichero de entrada con 100 registros, si indicamos "OPTION STOPAFT=30", nos escribirá en salida los registros comprendidos entre 1 y 30, ambos inclusive.
OPTION SKIPREC/STOPAFT
Se pueden combinar ambas utilidades del siguiente modo:
OPTION SKIPREC=número_de_registros_a_saltar,
STOPAFT=número_de_registro_que_para
Por ejemplo, tenemos un fichero de 100 registros, y queremos grabar en salida los comprendidos entre el 30 y 40 ambos inclusive. El método sería el siguiente:
OPTION SKIPREC=29,STOPAFT=11
9 comentarios:
Los ejemplos no están bien puestos, si los escribo así como ponen no van, lo que hice fue modificar la SYSIN:
//SYSIN DD *
SORT FIELDS=COPY
OPTION STOPAFT=100
Gracias Anónimo, se me fué la pinza.
eSTO QUE DICES :
Por ejemplo, tenemos un fichero de 100 registros, y queremos grabar en salida los comprendidos entre el 30 y 40 ambos inclusive. El método sería el siguiente:
OPTION SKIPREC=29,STOPAFT=40
LO QUE NOS TRAERA ES DE LA POSICION 30, 40 REGISTROS EN ADELANTE ES DECIR HASTA LA POSICION 70 , EL STOPAFT TRAE EL NUMERO DE REGISTROS QUE TIENES
UPSS...EL STOPAFT TRAE EL NUMERO DE REGISTROS QUE QUIERES
Gracias por la Info.
Claro, en ese caso pues, si tenemos un fichero de 100 registros, y queremos grabar en salida los comprendidos entre el 30 y 40 ambos inclusive. El método sería el siguiente:
OPTION SKIPREC=29,STOPAFT=10
Lo que nos empezará a escribir a partir del registro 30 (SKIPREC=29) y con el STOPAFT=10 le decimos que nos escriba los 10 primeros registros y luego pare de escribir.
Así tendremos un output de 10 registros, desde el 30 al 40.
Gracias por la info Jessica ;-)
Corregido! Más vale tarde que nunca.. xd
No es por malmeter, pero si queremos que grabe del 30 al 40 ambos inclusive tiene que escribir 11 registros, no 10.
OPTION SKIPREC=29,STOPAFT=11
Correctísimo compañero! jaja
Ahora mismo lo cambio! y gracias!