viernes, 16 de abril de 2021

Crear un blog con blogger

En un post anterior te contamos cómo crear un blog con blogger (pinchar aquí para verlo).

Pues bien, os presentamos Blog de Pruebas de PIF, un blog dedicado a la creación de un blog, así como a su mantenimiento y realización de trucos para que podáis hacer lo que queráis.

viernes, 2 de abril de 2021

viernes, 5 de marzo de 2021

Jcl - tratamiento de fechas (3)

Vamos a ver cómo se puede realizar tratamiento de fechas en un jcl. Para ello vamos a partir de la fecha del sistema y a suponer que la fecha del día es 8 de Agosto de 2017 (08-08-2017).


//* %%SET %%FECHAX = %%$ODATE
//*------------------------------------------------------------------------
//* %%SET %%AAAA     = %%SUBSTR %%FECHAX 1 4
//* %%SET %%MM        = %%SUBSTR %%FECHAX 5 2
//* %%SET %%DD         = %%SUBSTR %%FECHAX 7 2
//* %%SET %%FECDIA   = %%AAAA-%%MM-%%DD
//*------------------------------------------------------------------------
//* %%SET %%FECHAD  = %%$OYEAR-%%OMONTH-%%ODAY
//*------------------------------------------------------------------------

ODATE - contiene la fecha del día que según el ejemplo dado sería 20170808 (OJO!!!! fíjate en el formato, va primero el año y a continuación el mes y el día, todo junto, sin ningún tipo de separación).

La variable FECHAX contendrá la fecha del sistema, es decir, el ODATE (20170808).

La variable AAAA contendrá el año de la fecha existente en FECHAX (2017).

La variable MM contendrá el mes de la fecha existente en FECHAX (08).

La variable DD contendrá el día de la fecha existente en FECHAX (08).

La variable FECDIA contendrá la unión de las tres variables antes mencionadas separadas por guiones (2017-08-08).

La variable FECHAD contendrá la fecha del sistema en el formato AAAA-MM-DD (20170808). Si os fijáis se obtiene el mismo resultado que el obtenido en la variable FECDIA pero en una sola línea.

viernes, 8 de enero de 2021

Jcl - error SB37

Cuando un jcl falla en un paso de sort dando un error SB37 significa que el fichero que se está intentando generar en dicho paso necesita más espacio.

¿Recuerdas el post File Status 34 en Cobol publicado en este mismo blog? Si no te acuerdas puedes acceder al mismo pinchando aquí.

¿Por qué hacemos referencia a dicho post? Muy sencillo. Ambos errores son primos hermanos, es decir, el error SB37 en un jcl es lo que el file status 34 en un programa Cobol. Por lo tanto, se aplica la misma solución. Se debe aumentar el espacio al fichero que se está intentando alocar en el paso de sort.

Ejemplo, tenemos lo siguiente en la cláusula SORTOUT del paso de sort:



     //SORTOUT DD DSN=<<fichero_salida>>
     //                    DISP=(,CATLG,DELETE)
     //                    SPACE=(CYL,(500,50))

Si nos diera un error SB37 habría que aplicar la siguiente modificación:



     //SORTOUT DD DSN=<<fichero_cabecera>>
     //                    DISP=(,CATLG,DELETE)
     //                    SPACE=(CYL,(1000,100))

Se ha marcado en otro color el lugar en el que se ha aplicado la modificación y, si se compara con lo que se tenía previamente, se observa que se ha aumentado el espacio con el que se pretende alocar el fichero generado en el paso de sort.

viernes, 4 de diciembre de 2020

Estas son las cosas que hacen que los informáticos se rían de nosotros

El título del post coincide con el de un artículo aparecido en la versión digital del periódico El Confidencial. En este artículo se reflejan anécdotas vividas por todos aquellos informáticos que se dedican al soporte. Y cuando decimos "soporte" no nos referimos al hecho de soportar (a veces puede que sí) sino al ámbito del soporte a usuario o, como se dice más técnicamente, asistencia técnica o soporte técnico.

Puedes leer el artículo pinchando aquí.

viernes, 6 de noviembre de 2020

COBOL - cómo terminar un programa cobol

Pensemos en la típica estructura de un programa Cobol:

          INICIO
          TRATAMIENTO hasta <<fin-fichero-entrada>>
          FIN

Dentro del párrafo FIN solemos tener el cierre de los ficheros utilizados por el programa (los de entrada y salida) y los display's necesarios para mostrar las estadísticas (si tienes costumbre de ponerlos para reflejar cuántos registros se han leído del fichero de entrada, cuántos registros se han grabado en el fichero de salida y alguna cosa más que resulte de interés).

Si el programa ha llegado al párrafo FIN y ha sido capaz tanto de cerrar correctamente los ficheros utilizados como de mostrar las estadísticas significa que el programa ha terminado correctamente. Pero necesitamos algo más para que el jcl donde se ejecuta se entere de que ese programa ha finalizado correctamente.

Y te preguntarás: "Y, ¿qué es lo que se necesita?". Pues la respuesta es muy sencilla. Incluir las siguientes dos sentencias:

          MOVE ZEROS TO RETURN-CODE
          GOBACK

Éste es todo el código que necesitas para indicar la correcta finalización del programa.

Ahora bien, imagínate que necesitas que el programa finalice con un código distinto (por ejemplo, un código de retorno 2) en determinadas situaciones como puede ser que el fichero de salida esté vacío o que el fichero de errores contenga información. Antes de que te preguntes cómo se hace te lo voy a contar ya. Se hace de la siguiente manera:

          IF CONT-GRAB-FIC-SALIDA = 0
              MOVE 2 TO RETURN-CODE
              GOBACK
          END-IF

          IF CONT-GRAB-FIC-ERRORES > 0
              MOVE 2 TO RETURN-CODE
              GOBACK
          END-IF

OJO!!! Las líneas de código que acabamos de indicar como ejemplo para finalizar el programa con un código de retorno distinto de 0 se deben codificar en el programa antes que las otras líneas de código de finalización correcta. Y, ¿por qué? Porque si invertimos el orden y pusiéramos primero el código que indica la correcta finalización del programa, siempre finalizaríamos el programa correctamente y NUNCA devolvería el código de retorno 2 aunque se cumplan las casuísticas indicadas.

viernes, 2 de octubre de 2020

MongoDB

Aquí os dejamos interesantes vídeos acerca de MongoDB (base de datos de tipo NoSQL).

MongoDB en 20 minutos


¿Qué es SQL y NoSQL?


NoSQL VS SQL


viernes, 4 de septiembre de 2020

HOST - comando unnum

Seguro que te ha pasado alguna que al final del fichero aparece los números de secuencia. Si quieres eliminarnos y poder editar el fichero sólo tienes que ejecutar el comando unnum o unnumber.

En la línea donde pone Command ===> sólo tienes que poner el comando indicado y solucionado.

Para más información acerca de este comando sólo tienes que pinchar aquí.

viernes, 14 de agosto de 2020

Fundamentos de la programación

Apuntes muy interesantes y completos de la asignatura Fundamentos de la programación de la Facultad de Informática (UCM).

Pinchar aquí para acceder a dichos apuntes en formato pdf (interesantes por la abstracción procedimental y por la visión completa de C++).

viernes, 10 de julio de 2020

Jcl - DISP=(OLD,DELETE,KEEP)

Habitualmente solemos ver lo siguiente en los pasos de sort de los jcl's:

          //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 DD SPACE=(CYL,(1,1),RLSE)
          //SYSOUT     DD SYSOUT=*
          //SYSIN        DD *
              SORT FIELDS=COPY

Sin embargo, también podemos poner algo como lo siguiente:

          //SORT02 EXEC PGM=SORT
          //SORTIN    DD DSN=FICH.PRUEBA.ENTRADA,
          //               DISP=(OLD,DELETE,KEEP)
          //SORTOUT DD DSN=FICH.PRUEBA.SALIDA,
          //                     DISP=(,CATLG,DELETE),
          //                     SPACE=(CYL,1,1)
          //SORTWK01 DD SPACE=(CYL,(1,1),RLSE)
          //SYSOUT     DD SYSOUT=*
          //SYSIN        DD *
              SORT FIELDS=COPY

Lo primero de todo: en ambos casos debe existir el fichero que se está utilizando en el SORTIN, es decir, el fichero FICH.PRUEBA.ENTRADA debe existir para que no falle ni el paso de sort SORT01 ni el paso de sort SORT02.

Ahora vamos a ver qué diferencia hay entre lo utilizado en el paso SORT01 y lo utilizado en el paso SORT02: DISP=SHR y DISP=(OLD,DELETE,KEEP).

DISP=SHR: Con esta disposición nos limitamos a utilizar el fichero, SHR viene del inglés SHARE (que significa 'compartir'). Resulta que seguirá existiendo el fichero FICH.PRUEBA.ENTRADA cuando finalice el jcl, por lo tanto, no nos tenemos que olvidar de incluir un paso de borrado al final del jcl para borrar este fichero de trabajo junto con todos los demás que se generen a lo largo del mismo jcl.
DISP=(OLD,DELETE,KEEP): Con esta disposición lo que conseguimos es que el fichero FICH.PRUEBA.ENTRADA se borre automáticamente cuando termine OK el paso SORT02; sin embargo, el mencionado fichero seguirá existiendo en el caso hipotético de fallo en el paso SORT02 (lo que nos permite relanzar desde ese mismo paso).

viernes, 19 de junio de 2020

Validar un XML

¿Quieres saber si un XML es correcto? Para validarlo puedes usar la herramienta XML Validator: https://www.w3schools.com/xml/xml_validator.asp

Si en algún momento no se pudiera acceder a dicho validador, puedes acceder a la página de w3schools existente en la sección Webs de interés de este mismo blog.

viernes, 5 de junio de 2020

HOST - TSO línea de comandos

Pinchando aquí accederás a un listado con los diferentes comandos que puedes usar cuando estés trabajando en el tso del host.

Es muy útil porque en ocasiones se nos olvida qué comando utilizar cuando queremos hacer algo en concreto y necesitamos un lugar dónde buscar algo que nos sirva.

viernes, 22 de mayo de 2020

¿Excel ante su ocaso?

Podríamos estar ante el ocaso de Excel debido a dos motivos: (1) se podría haber quedado obsoleto para muchas compañías y (2) otras aplicaciones están comenzado a ganar mercado.

Si te interesa este tema, puedes leer el artículo completo pinchando aquí.