Mediante jcl podemos comprobar si un fichero existe.
Veamos un ejemplo:
//*******************************************************
//FICEXIST EXEC PGM=IDCAMS
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
LISTCAT ALL -
ENTRIES(DD.EE.JJJJJJJJ.FICHEROA.VERIFICA)
//*******************************************************
Con este paso detectamos si el fichero DD.EE.JJJJJJJJ.FICHEROA.VERIFICA existe. Simplemente tenemos que comprobar el código de retorno devuelto por este paso ya que si devuelve:
- el valor 4 significa que no existe
- el valor 0 significa que existe
Por lo tanto, el código de retorno 4 en el paso FICEXIST no debe significar la cancelación de este proceso.
Veamos cómo se podría utilizar una comprobación de este tipo.
//* COMPROBAR EXISTENCIA DE FICHERO
//*******************************************************
//PASO01OK EXEC PGM=STFICHA,
En el paso FASE01 estamos creando un fichero, FICHERO.GRABAR.MENSAJES, en el que estamos grabando el literal CADENA A GRABAR EN FICHERO.
En el paso FEXIST01 estamos comprobando la existencia del fichero DD.EE.JJJJJJJJ.FICHEROA.VERIFICA y a continuación viene lo "importante".
En el paso PASO01 tenemos un IF para evaluar el código de retorno devuelto por el paso previo, el paso que comprueba si existe o no el fichero. Si el código de retorno es 0 graba el literal EXISTE EL FICHERO en el fichero generado en el paso FASE01. En caso contrario graba el literal NO EXISTE EL FICHERO en el mismo fichero (es decir, en el generado en el paso FASE01).
Veamos cómo se podría utilizar una comprobación de este tipo.
//*******************************************************
//FASE01 EXEC PGM=STFICHA,
// PARM='CADENA A GRABAR EN FICHERO'
//STEPLIB DD DSN=<<librería-prod-ejecutables>>
//SYSOUT DD SYSOUT=*
// PARM='CADENA A GRABAR EN FICHERO'
//STEPLIB DD DSN=<<librería-prod-ejecutables>>
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//FFICHAS DD DSN=FICHERO.GRABAR.MENSAJES,
// DISP=(,CATLG,DELETE),
// SPACE=(CYL,(100,10))
//*******************************************************//* COMPROBAR EXISTENCIA DE FICHERO
//*******************************************************
//FEXIST01 EXEC PGM=IDCAMS
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
LISTCAT -
ENTRIES(DD.EE.JJJJJJJJ.FICHEROA.VERIFICA) -
NONVSAM
NONVSAM
//*******************************************************
//* EVALUAR CODIGO DE RETORNO
//*******************************************************
//PASO01 IF FEXIST01.RC = 0 THEN//* EVALUAR CODIGO DE RETORNO
//*******************************************************
//PASO01OK EXEC PGM=STFICHA,
// PARM='EXISTE EL FICHERO'
//STEPLIB DD DSN=<<librería-prod-ejecutables>>
//SYSOUT DD SYSOUT=*
//STEPLIB DD DSN=<<librería-prod-ejecutables>>
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//FFICHAS DD DSN=FICHERO.GRABAR.MENSAJES,DISP=MOD
/*
//PASO01 ELSE
//PASO01KO EXEC PGM=STFICHA,
/*
//PASO01 ELSE
//PASO01KO EXEC PGM=STFICHA,
// PARM='NO EXISTE EL FICHERO'
//STEPLIB DD DSN=<<librería-prod-ejecutables>>
//SYSOUT DD SYSOUT=*
//STEPLIB DD DSN=<<librería-prod-ejecutables>>
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//FFICHAS DD DSN=FICHERO.GRABAR.MENSAJES,DISP=MOD
//PASO01 ENDIFEn el paso FASE01 estamos creando un fichero, FICHERO.GRABAR.MENSAJES, en el que estamos grabando el literal CADENA A GRABAR EN FICHERO.
En el paso FEXIST01 estamos comprobando la existencia del fichero DD.EE.JJJJJJJJ.FICHEROA.VERIFICA y a continuación viene lo "importante".
En el paso PASO01 tenemos un IF para evaluar el código de retorno devuelto por el paso previo, el paso que comprueba si existe o no el fichero. Si el código de retorno es 0 graba el literal EXISTE EL FICHERO en el fichero generado en el paso FASE01. En caso contrario graba el literal NO EXISTE EL FICHERO en el mismo fichero (es decir, en el generado en el paso FASE01).