viernes, 5 de julio de 2019

Jcl - comprobar si un fichero existe

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.


          //*******************************************************
          //FASE01 EXEC PGM=STFICHA,
          //            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
          //*******************************************************
          //* EVALUAR CODIGO DE RETORNO
          //*******************************************************
          //PASO01   IF FEXIST01.RC = 0 THEN
          //PASO01OK EXEC PGM=STFICHA,
          //            PARM='EXISTE EL FICHERO'
          //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,
          //            PARM='NO EXISTE EL FICHERO'
          //STEPLIB DD DSN=<<librería-prod-ejecutables>>
          //SYSOUT DD SYSOUT=*
          //SYSPRINT DD SYSOUT=*
          //FFICHAS DD DSN=FICHERO.GRABAR.MENSAJES,DISP=MOD
          //PASO01   ENDIF

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).