Este JCL mostrará el uso de los parámetros SKIP y COUNT del programa IDCAMS para poder seleccionar secciones de un archivo secuencial.
SKIP : Omite N registros desde el inicio del archivo.
COUNT : Selecciona los N registros indicados a partir del inicio del archivo o en combinación con SKIP desde el registro siguiente del omitido.
Ejemplo:
Para este ejemplo usaremos un archivo secuencial de longitud fija de 80 caracteres el cual contiene 20 líneas de información, el contenido es el siguiente:
****** ***************************** Top of Data ****************************** 000100 REGISTRO_001 000200 REGISTRO_002 000300 REGISTRO_003 000400 REGISTRO_004 000500 REGISTRO_005 000600 REGISTRO_006 000700 REGISTRO_007 000800 REGISTRO_008 000900 REGISTRO_009 001000 REGISTRO_010 001100 REGISTRO_011 001200 REGISTRO_012 001300 REGISTRO_013 001400 REGISTRO_014 001500 REGISTRO_015 001600 REGISTRO_016 001700 REGISTRO_017 001800 REGISTRO_018 001900 REGISTRO_019 002000 REGISTRO_020 ****** **************************** Bottom of Data ****************************
COUNT :
Lo que haremos será seleccionar los primero 5 registros desde el archivo origen, el truco radica en la línea 18 “COUNT(5)“:
//ADJRIDC0 JOB (EEHA,1),'IDCAMS',REGION=0M,
// MSGLEVEL=(1,1),MSGCLASS=X,CLASS=A,
// NOTIFY=M818439
//*-------------------------------------------------------------------
//STEP001 EXEC PGM=IDCAMS,DYNAMNBR=20,COND=(0,LT)
//*
//INF001 DD DSN=M818439.TEST.IDCAMS,
// DISP=SHR
//*
//OUT001 DD DSN=M818439.TEST.IDCAMS.COUNT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=3390,SPACE=(CYL,(1,1),RLSE),
// DCB=(M818439.TEST.IDCAMS)
//*
//SYSPRINT DD SYSOUT=*
//AMSDUMP DD SYSOUT=*
//SYSIN DD *
REPRO IFILE(INF001) OFILE(OUT001) COUNT(5)
/*
//*-------------------------------------------------------------------
Resultado:
****** ***************************** Top of Data ****************************** 000100 REGISTRO_001 000200 REGISTRO_002 000300 REGISTRO_003 000400 REGISTRO_004 000500 REGISTRO_005 ****** **************************** Bottom of Data ****************************
SKIP :
Ahora omitiremos los primeros 15 registros desde el archivo origen, el truco radica en la línea 18 “SKIP(15)“:
//ADJRIDC0 JOB (EEHA,1),'IDCAMS',REGION=0M,
// MSGLEVEL=(1,1),MSGCLASS=X,CLASS=A,
// NOTIFY=M818439
//*-------------------------------------------------------------------
//STEP001 EXEC PGM=IDCAMS,DYNAMNBR=20,COND=(0,LT)
//*
//INF001 DD DSN=M818439.TEST.IDCAMS,
// DISP=SHR
//*
//OUT001 DD DSN=M818439.TEST.IDCAMS.SKIP,
// DISP=(NEW,CATLG,DELETE),
// UNIT=3390,SPACE=(CYL,(1,1),RLSE),
// DCB=(M818439.TEST.IDCAMS)
//*
//SYSPRINT DD SYSOUT=*
//AMSDUMP DD SYSOUT=*
//SYSIN DD *
REPRO IFILE(INF001) OFILE(OUT001) SKIP(15)
/*
//*-------------------------------------------------------------------
Resultado:
****** ***************************** Top of Data ****************************** 001600 REGISTRO_016 001700 REGISTRO_017 001800 REGISTRO_018 001900 REGISTRO_019 002000 REGISTRO_020 ****** **************************** Bottom of Data ****************************
SKIP + COUNT :
Por último una combinación de ambos parámetros, en donde omitiremos los primeros 5 registros y grabaremos en el archivo de salida sólo los siguientes 10, el truco radica en la línea 18 “SKIP(05) COUNT(10)“:
//ADJRIDC0 JOB (EEHA,1),'IDCAMS',REGION=0M,
// MSGLEVEL=(1,1),MSGCLASS=X,CLASS=A,
// NOTIFY=M818439
//*-------------------------------------------------------------------
//STEP001 EXEC PGM=IDCAMS,DYNAMNBR=20,COND=(0,LT)
//*
//INF001 DD DSN=M818439.TEST.IDCAMS,
// DISP=SHR
//*
//OUT001 DD DSN=M818439.TEST.IDCAMS.SKIP.COUNT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=3390,SPACE=(CYL,(1,1),RLSE),
// DCB=(M818439.TEST.IDCAMS)
//*
//SYSPRINT DD SYSOUT=*
//AMSDUMP DD SYSOUT=*
//SYSIN DD *
REPRO IFILE(INF001) OFILE(OUT001) SKIP(05) COUNT(10)
/*
//*-------------------------------------------------------------------
Resultado:
****** ***************************** Top of Data ****************************** 000600 REGISTRO_006 000700 REGISTRO_007 000800 REGISTRO_008 000900 REGISTRO_009 001000 REGISTRO_010 001100 REGISTRO_011 001200 REGISTRO_012 001300 REGISTRO_013 001400 REGISTRO_014 001500 REGISTRO_015 ****** **************************** Bottom of Data ****************************
