lunes, 2 de enero de 2012

JCL: Ordenar un fichero mediante SORT

     Para ordenar un fichero mediante un paso de SORT se haría lo siguiente:

          //SORT01 EXEC PGM=SORT
          //SORTIN    DD DSN=FICH.PRUEBA.ENTRADA,DISP=SHR
          //SORTOUT DD DSN=FICH.PRUEBA.SALIDA,
          //                     DISP=(,CATLG,DELETE),
          //                     SPACE=(CYL,1,1)
          //SORTWK01 SPACE=(CYL,(1,1),RLSE)
          //SYSOUT     DD SYSOUT=*
          //SYSIN        DD *
              SORT FIELDS=(1,10,CH,A)

     Obsérvese que para ordenar el fichero FICH.PRUEBA.ENTRADA se utiliza lo siguiente: SORT FIELDS=(1,10,CH,A) => esto supone que se va a ordenar por un campo que empieza en la posición 1, dicho campo es de 10 posiciones, es un campo alfanumérico -CH- y se va a ordenar de forma ascendente -A-

     El resultado de la ordenación se guarda en el fichero FICH.PRUEBA.SALIDA

     Para ordenar de forma descendente habría que sustituir la A por una D.

     Ahora bien, ¿qué pasa sin en lugar de tener un campo alfanumérico (razón por la cual usamos CH) tenemos un campo cuyo tipo es distinto? Pues entonces tendríamos que sustituir CH por:
  • BI si el campo a ordenar es un campo numérico: PIC S9(-)
  • ZD si el campo a ordenar es un campo numérico: PIC 9(-)
  • PD si el campo a ordenar es un campo numérico empaquetado: PIC S9(-)COMP-3
Resumen: para ordenar un fichero en otro debemos utilizar lo siguiente:

               SORT FIELDS (X1,X2,TD,ORD)

siendo X1 la posición en la que empieza el campo a ordenar dentro del fichero
          X2 la longitud del campo a ordenar
          TD el tipo de dato del campo a ordenar (CH, ZD, PD,...)
          ORD el tipo de ordenación (A - Ascendente, D - Descendente)