Mostrando entradas con la etiqueta fichero. Mostrar todas las entradas
Mostrando entradas con la etiqueta fichero. Mostrar todas las entradas

viernes, 3 de abril de 2020

Jcl - comprobar si un fichero tiene datos

Mediante jcl podemos comprobar si un fichero tiene datos.

Veamos un ejemplo:

          //*******************************************************
          //FICVACIO EXEC PGM=IDCAMS
          //FENTRADA DD DSN=DD.EE.JJJJJJJJ.FICHEROA.VERIFICA,
          //                      DISP=SHR
          //FSALIDA DD DUMMY
          //SYSPRINT DD SYSOUT=*
          //SYSIN DD *
               REPRO COUNT(1)      -
               INFILE(FENTRADA)    -
               OUTFILE(FSALIDA)
          //*******************************************************

Con este paso detectamos si el fichero DD.EE.JJJJJJJJ.FICHEROA.VERIFICA está vacío o, por el contrario, tiene datos. Simplemente tenemos que comprobar el código de retorno devuelto por este paso ya que si devuelve:

  • el valor 4 significa que está vacío
  • el valor 0 significa que tiene datos

Por lo tanto, el código de retorno 4 en el paso FICVACIO no debe significar la cancelación de este proceso.

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

martes, 4 de junio de 2019

HOST - Aplantillar un fichero con su copy

Ponemos F1 a la izquierda del fichero.

Tras hacer esto damos INTRO y aparece una pantalla en la que hay que informar ciertas cosas que ahora te contamos.

En Record layout dataset indicamos la librería de las copys y en Member name indicamos la copy con la que aplantilla el fichero. Damos INTRO y aparece otra pantalla llamada Selection Criteria Menuestando aquí podemos hacer dos cosas:

1) Damos PF3 y aparece toda la información del fichero aplantillada de acuerdo a la copy indicada.
2) Elegimos la opción 2 de FORMATTED.

Si optamos por la segunda opción (elegir la opción 2 y damos INTRO) veríamos otra pantalla con el listado de los campos de la copy.

En esta pantalla podemos dar PF3 (volviendo a la pantalla antes mencionada, es decir, Selection Criteria Menu) o podemos aplicar algún tipo de criterio para seleccionar registros. Para seleccionar registros tenemos: EQ (igual), NE (distinto), LT (menor que), LE (menor o igual), GT (mayor que), GE (mayor o igual), CO (contiene) y alguna opción más que no recuerdo por no haberla usada nunca.

Tras aplicar los criterios damos INTRO y luego PF3 tantas veces como sea necesario hasta que se muestre la información (porque existen registros que cumplan las condiciones) o porque no hay información que cumpla las condiciones en cuyo caso se mostraría un mensaje por pantalla indicando tal situación (dicho mensaje es NO RECORDS SELECTED).

Esto es todo con F1. Si hubiéramos puesto F2 en su lugar, todo lo explicado valdría pero la diferencia radica en que podemos modificar la información (eso si el número de registros no supera cierta cantidad, ya que si la supera no se puede modificar nada ya que el propio host inhabilita esa opción y es como haber entrado con F1).

viernes, 4 de enero de 2019

HOST - Cuántos registros hay en un fichero (2)

Cuando queramos saber cuántos registros hay en un fichero que cumplan una determinada condición hay que tener en cuenta el tipo de dato.

Si ese campo está en hexadecimal (en la correspondiente copy está definido como PIC S9(03)V COMP-3), tendríamos que entrar en modo View en el fichero y escribir lo siguiente en la línea de comandos:

F X'003C' 1321 ALL

Con este comándo estamos diciéndole al host que busque el valor 3 en la posición 1321 (esa es la posición en la que empieza el campo en cuestión) en todo el fichero.

Luego damos INTRO. Cuando acabe de contar cuántos registros hay en el fichero que cumplan la condición descrita en el comando aparecerá en pantalla lo siguiente: 13732 CHARS X'003C'

De esa manera se indica que hay 13732 registros que tengan un 3 en la mencionada posición.

sábado, 1 de diciembre de 2018

HOST - Cuántos registros hay en un fichero (1)

Cuando queremos saber el número total de registros que hay en un fichero es muy fácil.

Entramos en modo View en el fichero y vamos al final del mismo situándonos en el último registro.

Si hacemos eso vemos el número total de registros. Aparece algo como lo siguiente: Line 02118897.


viernes, 5 de octubre de 2018

Jcl - ficheros temporales

De esta manera se crea un fichero temporal en un jcl:

     //CUENTAS  DD  DSN=&&CUENTAS,
     //                      DISP=(,CATLG,DELETE),
     //                      SPACE=(CYL,(36,4))

Ese tipo de fichero es temporal, es decir, que no se cataloga con un nombre concreto, y al acabar el jcl "desaparece", digamos que son ficheros virtuales que no se graban en disco.

Para hacer referencia a él creo que hay que poner nombre-de-paso.&&cuentas (según ejemplo cuentas.&&cuentas), pero hablo de memoria...si hay alguien que lo supiera con seguridad se agradecería que dejara un comentario para confirmarlo y si no fuese así que indicase cómo se referencia a un fichero de este tipo dentro del mismo jcl (mil gracias!!!).

jueves, 5 de julio de 2018

HOST - Cómo comparar dos ficheros

Vamos a ver cómo comparar dos ficheros en entorno host.

Para ello vamos a la opción 3.13

Aparece una pantalla en la que tendremos que introducir los ficheros a comparar.

Imagínate que tenemos un fichero que ya existe llamado A y uno que acabamos de generar llamado B. Queremos verificar si son iguales o si hay alguna diferencia. En Old DS Name pondríamos el fichero A (el ya existente o viejo) y en New DS Name pondríamos el fichero B (el que acabamos de crear nosotros o nuevo). Tras informar la anterior pantalla tal y como hemos indicado, vamos a pulsar PF8 porque no se ven el resto de opciones. Entre esas opciones hay una interesante que pasamos a explicar a continuación.

Execution Mode es una opción en la que podemos elegir entre Foreground o Batch. La diferencia entre ambos es que con el primero se queda bloqueado el host y no puedes seguir trabajando mientras que con el segundo se lanza un proceso batch que realiza el "compare" de ambos ficheros (mientras se ejecuta ese proceso, cuya salida puedes ver en el spool, puedes seguir trabajando en el host). Si eliges la opción Batch debes elegir una cabecera (la misma cabecera que pondrías en un jcl que quisieras ejecutar en desarrollo, de hecho la puedes copiar de cualquiera de los que tengas montados).

Damos INTRO y aparece el jcl de compare que se ejecutará.

Se submite (en la línea de comandos, que es donde está situado el cursor, se pone SUB y se da INTRO).

Tras hacer lo anterior se lanza un job que se ejecuta y mientras tanto puedes seguir trabajando en host. Cuando finalice dicho job (ese jcl que has submitido) se puede ver su correspondiente salida en el spool. En la salida generada podrás comprobar si ambos ficheros son iguales o hay diferencias.

Incluso puedes grabar esa salida del spool en un fichero (¿te acuerdas cómo se hace? si no es así consulta el post llamado HOST - Copiar salida SPOOL en fichero que encontrarás en este mismo blog).

viernes, 1 de junio de 2018

HOST - Copiar salida SPOOL en fichero

En esta entrada te vamos a explicar cómo copiar la salida del spool en un fichero.

Para ello vamos al spool y sobre la ejecución que queramos guardar ponemos el comando xdc.

Tras dar INTRO nos aparece una pantalla en donde indicamos el nombre del fichero (Data set name) y la disposición (Disposition, se elige NEW en la disposición porque es nuevo el fichero).

A continuación damos INTRO y tras copiarse en el fichero indicado, con la opción 3.4 del menú ISPF procedemos a ver el fichero en modo "view".

Damos INTRO y entramos en el fichero en el modo indicado.

Ya tenemos en un fichero la salida del spool.

miércoles, 4 de abril de 2018

Jcl: crear fichero con el contenido que queramos

En un jcl podemos generar un fichero con el contenido que queramos.

Por ejemplo, queremos generar un fichero que contenga la cabecera de un listado. Dicha cabecera contendrá cada uno de los nombres de las columnas a contener en el listado y estarán separados por puntos y comas (;). Para ello nos basta un paso de sort, centrémonos en el SORTIN y en el SORTOUT:

     //SORTIN    DD *
     NIF;BANCO;OFICINA;DC;CUENTA
     //SORTOUT DD DSN=<<fichero_cabecera>>
     //                    DISP=(,CATLG,DELETE)
     //                    SPACE=(CYL,(100,10))

Se ejecuta y el resultado es un fichero con una sola línea que contendrá lo que está marcado en malva.

Espero que esta entrada te haya servido de ayuda. Cualquier duda que tengáis no dudéis en plantearla.

miércoles, 19 de junio de 2013

Cobol: imprimir información (2) - generar un pdf

En relación a la impresión de información desde un programa Cobol tenemos la impresión de un pdf.

He localizado el siguiente enlace, muy interesante, que explica cómo se hace:


Verás que se menciona los ficheros de impresión, para saber un poco más de este tema consulta la entrada de mi blog con título Cobol: imprimir información (1).

miércoles, 29 de mayo de 2013

Cobol: imprimir información (1)

Si queremos imprimir información debemos enviar información a impresora (valga la redundancia).

¿Cómo se hace eso desde Cobol? Muy fácil, sólo tenemos que crear un fichero en nuestro programa que haga referencia a la impresora.

Estamos acostumbrados a poner algo como lo siguiente:

     SELECT FENTRADA ASSIGN TO FENTRADA

     La anterior sentencia lo que hace es asignar en nuestro programa cobol el
     nombre FENTRADA al fichero FENTRADA que existe en el jcl que llama a
     nuestro programa.

Pero crear un fichero en nuestro programa que haga referencia a la impresora es tan fácil como lo siguiente:

     SELECT IMPRES ASSIGN TO PRINTER

     FD IMPRES LABEL RECORD OMITTED

     01 REG-IMPRES PIC X(80)

Y luego, sólo que habría que informar la información a imprimir y escribirlo en el fichero.

Esto es muy típico, por ejemplo, cuando nos llega un fichero en entrada con el formato adecuado para ser impreso lo procesamos de manera que cada línea leída se va grabando en el fichero que hace referencia a la impresora que, después de todo, es un fichero de salida.