Sorry, this page is no longer available
We may earn an affiliate commission when you visit our partners.
Course image
Adrián Domingo

¡Curso COBOL. ¡Ya es posible aprender COBOL desde casa. Se trata del videocurso en español más completo existente sobre COBOL en toda la red, con explicaciones muy pormenorizadas y detalladas de su sintaxis. Yo empecé trabajando como programador en mainframes MVS y eché de menos este tipo de curso cuando empecé; jamás lo encontré. Es el curso que todo aquel que en su momento nos iniciamos en COBOL quisiéramos haber podido tener a nuestro alcance; en vez de tener que ir de web en web buscando pedazos de información de manera casi desesperada. Espero que el esfuerzo de ¡meses. que he podido condensar en este curso os sea de muchísimo provecho.

Read more

¡Curso COBOL. ¡Ya es posible aprender COBOL desde casa. Se trata del videocurso en español más completo existente sobre COBOL en toda la red, con explicaciones muy pormenorizadas y detalladas de su sintaxis. Yo empecé trabajando como programador en mainframes MVS y eché de menos este tipo de curso cuando empecé; jamás lo encontré. Es el curso que todo aquel que en su momento nos iniciamos en COBOL quisiéramos haber podido tener a nuestro alcance; en vez de tener que ir de web en web buscando pedazos de información de manera casi desesperada. Espero que el esfuerzo de ¡meses. que he podido condensar en este curso os sea de muchísimo provecho.

Breve descripción de contenidos

En este curso os enseño, antes de comenzar, a instalaros un Mainframe MVS en vuestro propio PC para programar en él con total normalidad. Veremos a un nivel básico qué es y cómo funciona un Host, nos adentraremos en el TSO y en su gestión ISPF y os enseñaré a moveros con soltura en este sistema operativo, así como los comandos básicos de edición y gestión de ficheros y miembros.

Tras esto, estaremos en disposición de empezar a desarrollar los primeros programas en lenguaje COBOL y sus ejecutables JCL. Abundaremos, paso a paso, en los diferentes tipos de programas COBOL que podemos codificar, todo ello haciendo ejemplos continuamente: comenzaremos por el típico programa "Hola Mundo" e iremos complicando paulatinamente el código de nuestros programas hasta abarcar prácticamente todo el lenguaje de programación.

Asimismo, veremos cómo editar y manipular diferentes tipos de ficheros desde JCL, aprendiendo a utilizar las utilities más populares de este lenguaje. Por supuesto, haremos ejemplos continuamente para ver "en vivo" su funcionamiento. Todo esto nos permitirá empezar a codificar otro tipo de programas COBOL: serán programas que utilizan ficheros, ya sea en su entrada o en su salida.

Notas de interés para l@s alumn@s: Si enéis cualquier duda o sugerencia relacionada con el curso, podéis poneros en contacto conmigo a través de mensaje privado Udemy O a través del correo Gmail siguiente: adria.dgbcn

Debido al enorme tiempo que me conlleva hacer este tipo de cursos, no puedo ofertarlos de manera gratuita. Sin embargo, pese a no existir ningún curso similar en la red, he decidido poner el precio más bajo posible, aunque su valor real es muchísimo mayor (más de 50 clases, asesoramiento al alumnado por email, materiales descargables...). Creo que, aunque podamos tener una situación económica complicada, todos nos hemos gastado algunos euros en ir al cine o comprar una nueva camiseta para el verano; por ello, gastar unos pocos euros en un curso tan completo no lo veo descabellado.

En cualquier caso, como siempre existen situaciones excepcionales, si alguien de verdad necesita poder realizar el curso y no dispone de los medios económicos, que se ponga en contacto conmigo y concederé acceso totalmente gratuito. Mi intención es que todo aquel que esté interesado pueda registrarse y completar el curso. Además, me encanta poder compartir conocimientos con los demás y no me gustaría que motivos de índole económica puedan sesgar las oportunidades de personas que tengan especial necesidad.

Mis más sinceras gracias a tod@s. ¡Disfrutad el curso.

Enroll now

What's inside

Learning objectives

  • Instalación completa de un emulador de terminales mainframe 3270 en el pc
  • Dominar la facilidad de navegación ispf del tso
  • Decenas de comandos de edición en la facilidad ispf que permiten manejarse con soltura en el entorno
  • Estructura, divisiones y sentencias del lenguaje cobol
  • Elaboración de programas cobol desde un nivel básico hasta intermedio
  • Elaboración de ejecutables jcl para probar nuestros programas cobol desarrollados
  • Compilar y linkeditar programas cobol en el emulador usando el lenguaje de control de trabajos jcl
  • Desarollar y ejecutar programas con la técnica de programación estructurada
  • Desarrollar y ejecutar programas que utilizan tanto archivos secuenciales como indexados
  • Desarrollar y ejecutar programas con tablas internas
  • Desarrollar y ejecutar programas con alimentación de datos desde sysin
  • Desarrollar y ejectutar subprogramas (módulos) llamados desde otros programas (principales) usando la sentencia call
  • Desarrollar y ejecutar programas cobol de gestión de ficheros
  • Conocer y utilizar las principales utilidades jcl: iefbr14, idcams, sort, iebgener, iebcopy...
  • Desarrollar jcls con utilidades sort para la manipulación directa de ficheros
  • Realizar transferencias de archivos desde el pc al host y viceversa
  • Pruebas escritas con preguntas para consolidar los conocimientos adquiridos en cada bloque del curso
  • Show more
  • Show less

Syllabus

Repasaremos la situación actual del lenguaje COBOL en el mercado laboral, entraremos en los detalles de la arquitectura del MVS y os facilitaré el índice y planning de los contenidos del curso.
Read more

MODIFICACION DE CONTENIDOS: debido a la enorme extensión que está teniendo el curso (más de 60 clases, decenas de horas de video) he decidido no introducir aquí también el uso de DB2/SQL. Se verá cómo manejar una base de datos desde el Mainframe y la sintaxis COBOL necesaria para ello en otro curso que desarrollaré en el futuro.

En esta primera clase introductoria os hago un breve recorrido histórico en el universo del COBOL, por lo que hablar de IBM y su evolución será una parada obligada. Os explico también la utilidad y situación actual de este lenguaje en la actualidad; pese a ser uno de los primeros lenguajes de programación que existieron, sigue teniendo una elevadísima explotación en la actualidad ya que se trata de un entorno muy estable y seguro. Todos las grandes empresas multinacionales del mundo, la banca, las empreasas aseguradoras, crediticias, etc, utilizan estos sistemas.

Breve repaso de los contenidos que trataremos a lo largo del curso. Comenzaremos, como no puede ser de otra manera, con una guía de instalación pormenorizada del entorno. Continuaremos dando los primeros pasos en el TSO, esto es, aprendiendo a utilizar el sistema de navegación de menús ISPF característico. Con estos conocimientos adquiridos, comenzaremos a desarrollar programas batch sencillos que iremos complicando paulatinamente. Posteriormente introduiremos el tratamiento de tablas mediente el gestor DB2 y aprenderemos a crear programas COBOL con accesos a base de datos (sentencias SQL embebidas). Crearemos ejecutables JCL y compilaremos y probaremos los programas creados.

En esta sección repasamos y explicamos la evolución de las arquitecturas mainframe, desde el primer sistema operativo típico, esto es, MVS, hasta las z-Arquitecturas actuales. El objetivo no es ser un experto en estas arquitecturas, sino más bien comprender la idea básica de su funcionamiento y conseguir que no os perdáis entre un océano de siglas diferentes que iremos utilizando y nombrando como parte de la jerga a lo largo de todo el curso.

El primer paso para instalar el entorno de trabajo es descargar un emulador. En esta clase os guío en la instalación del emulador hércules (http://www.hercules-390.org/)

La descarga del AD/CD (imagen del sistema operativo Z/OS) depende completamente de redes P2P. Es ilegal distribuir software sin licencia; por este motivo, no os puedo adjuntar los discos (ficheros .cckd). Una vez los tengáis, debéis guardarlos en la carpeta ZOS110 de Hércules.

Asimismo, os adjunto el fichero de configuración del emulador. ¡Ojo! Deberéis cambiar la extensión .txt a .cnf para que os funcione!

Por último, necesitamos instalar la consola (terminal) de acceso al TSO. Por ejemplo, podéis descargarla de https://www.tombrennansoftware.com/index.html. Una vez instalada, os ayudo a configurar su conexión a Hércules (mediente el parámetro CNSLPORT) y aprenderemos a crear sesiones de trabajo.

¡Ya tenemos todo el entorno instalado! Ahora ingresaremos por primera vez en el MVS; para ello, debemos hacer IPL y esperar a que se cargue el NIP y el AD/CD. Dado que estamos en un entorno emulado, necesitaremos dos sesiones: una para la consola del emulador y otra para ingresar en el TSO. Entraremos con el usuario genérico IBMUSER.

Igual de importante que abrir es cerrar el entorno ordenadamente. Si cerramos "a lo burro", la próxima vez que ingresemos en el sistema podemos tener errores graves que impidan el correcto funcionamiento del entorno; por tanto, ¡nunca cerréis sin seguir el procedimiento estándar que aquí os explico!

Es el momento de aprender las funcionalidades básicas de gestión de miembros en ISPF.

Aquí vemos cómo crear librerías y miembros en librerías desde las opciones de menú ISPF. Asimismo, os explico cómo copiar, mover, renombrar, etc librerías y miembros.

Explicamos los principales tipos de registros con que podemos definir un DataSet (DS, set de datos, librería; son sinónimos): F, V, FB, VB y U.

Explico también los diferentes tipos de DS que existen en MVS, ya que al ser un sistema operativo basado en librerías, es imprescindible conocer los principales tipos y cuándo utilizar cada una, así como la manera de crearlas:

  • Ficheros PS (secuenciales)

  • Ficheros PDS (particionados)

  • Ficheros PDSE (extendidos)

  • Ficheros VSAM (indexados)

  • Ficheros GDG (generacionales)

Explicaré también los principales parámetros (memoria principal y secundaria, BLK, LRECL, ...) y cómo optimizar el tamaño del bloque de registros (aunque por defecto el sistema SMS, salvo en algunos casos, lo optimiza automáticamente).

Comenzaremos a aprender algunas de las estructuras y sintaxis básicas del lenguaje COBOL, así como constantes figurativas, indicadores, operadores relacionales y operadores lógicos.

Os introduzco también las divisiones y secciones de las que consta cualquier programa COBOL, explicando algunas de sus principales características:

  1. Identification Division: área de identificación del programa 

  2. Environment Division: área de definición de dispositivos de ejecución y control de ficheros E/S.

  3. Data Division: área de definición de las estructuras de datos.

  4. Procedure Division: área para la secuencia de operaciones que resuelven el algoritmo.

Creamos nuestro primer programa COBOL: un típico "Hola Mundo". El objetivo es que, a ejecutarlo, nos aparezca el mensaje por pantalla y, durante el camino, aprender los siguientes conceptos básicos:

  • Programación Estructurada: sentencia PERFORM

  • Instrucciones básicas MOVE, DISPLAY.

  • Definición y uso de variables de trabajo: números de nivel.

Crearemos nuestro primer JCL, necesario para, al submitirlo, generar el loadmodule del fuente (es decir, el ejecutable). De esta necesidad, aprenderemos:

  • La sintaxis básica de un JCL: JOBLIB, EXEC, DSN, DISP...

  • Submitir un JCL y ver el resultado en el SDSF (spool)

  • Aprender a movernos en el ST del SDSF: ver compilaciones, enmendar errores de codificación, etc.

Aprendemos a ejecutar el loadmodule generado en la clase anterior usando la sentencia CALL. También hacemos unas pequeñas modificaciones sobre el código fuente para conseguir ver el resultado de manera centrada en la pantalla y, de paso, os enseño cómo ver la salida en el SDSF, arreglar errores de compilación, concatenar varias variables en un DISPLAY y ejecutar el loadmodule desde la librería de objetos que nos hemos creado.

Breve repaso de Programación Estructurada, con los diferentes tipos de estructuras y ejemplos de cada caso.

Para evitar la ruptura del método de programación estructurada, queda TERMINANTEMENTE PROHIBIDO hacer uso de la sintaxis GO TO. Es una posibilidad que los compiladores admiten, pero su uso indiscriminado y abusivo es algo a evitar. De hecho, en pocas empresas está permitido su uso! En su sustitución, mejor utilizar siempre sentencias PERFORM convenientemente adaptadas para el objetivo (podemos romper la ejecución y forzar el final del programa a través de la activación de un switch, por ejemplo --> Moraleja: nunca uséis la sentencia GO TO !).

Creamos un programa que es capaz de mostrar la fecha y la hora de ejecución por pantalla. Nos sirve para repasar las divisiones en que se estructura cualquier programa COBOL, aprender a definir estructuras de datos en la Data Division (variables, literales, campos numéricos y alfanuméricos, campos simples, campos compuestos...), practicar la sintaxis aprendida en el "Hola Mundo" y aprender algunas cosas más.

En particular, aprenderemos la sentencia ACCEPT y su sintaxis para adquirir datos externos al programa (datos de sistema).

Modificaremos el programa anterior para que, entre otras cosas, muestre el día de la semana o el mes sin espacios al final, que hace que quede "fea" la apariencia del mensaje. Para ello, haremos uso de:

  • Sentencias INSPECT TALLYING / REPLACING.

  • Bucles PERFORM UNTIL.

  • Cláusula REDEFINES en la declaración de variables.

  • Enfrentarnos por primera vez al uso de arrays en lenguaje COBOL: OCCURS.

  • Sentencia COMPUTE para la realización de cálculos aritméticos.

En esta clase elaboramos un programa que lee un listado con los días de la semana por SYSIN.

En esta clase elaboramos los JCL necesarios para ejecutar el programa creado en la clase 18.

Optamos por separar la creación del objeto linkeditado de la propia ejecución del si del programa; para ello, separamos todo el proceso necesario en dos JCLs:

- Job de creación del linkeditado (mediante llamada a utilitdad IGYWCL de IBM).

- Job de GO ("ejecución") del programa.

Con esto evitamos al sistema tener que volver a crear el objeto cada vez que queramos ejecutar; ¡es un sinsentido crearla y destruirla con cada ejecución!

Cambiamos la salida del programa, guardándo el resultado en un fichero en vez de dejarlo en el spool.

Para ello, es necesario modificar la SYSOUT del JCL de GO.

En esta clase reutilizamos el programa de la clase anterior (listado días de la semana) para implementar una búsqueda de un día en concreto, que también le pasamos por SYSIN, en el listado.

Esto nos permitirá introducir las variables booleanas, muy utilizadas en Cobol a modo de apagadores/encendedores de eventos (switches), Se trata, por cierto, de un elemento muy típico de la programación estructurada.

En esta clase introducimos algunos conceptos básicos sobre cómo realizar operaciones arimtéticas en COBOL: sumas (ADD), restas (SUBTRACT), divisiones (DIVIDE), operaciones matemáticas más elaboradas (sentencia COMPUTE) y controlar los posibles errores mediante el mandado ON SIZE ERROR.

Link con el acceso a la web del Ministerio del Interior del Gobierno de España:

http://www.interior.gob.es/web/servicios-al-ciudadano/dni/calculo-del-digito-de-control-del-nif-nie

Breve introducción a la artimética modular básica para comprender el funcionamiento la función Cobol FUNCTION MOD(A B). El uso de esta función nos permite ahorrar gran cantidad de código a la hora de calcular dígitos faltantes en un DNI, la letra de un DNI, los dígitos de control de un número de cuenta, etc.

En la diapositiva, como comento en la clase, hay erratas en los ejemplos de módulo 3 y módulo 4. Os pidos disculpas y espero que haya quedado aclarado.

En esta clase rehacemos el programa el cálculo de la letra de un DNI usando la función de cálculo modular FUNCTION MOD en vez de la setencia DIVIDE.

En esta clase desarrollamos un algoritmo que comprueba si un número de cuenta (código IBAN) es correcto o no.

Esto nos va a permitir introducir el método de búsquedas binarias en tablas (internas) de programas COBOL haciendo uso de la sentencia SEARCH. Como se explica en el vídeo, ésta es su sintaxis:

SEARCH variable1 

    [AT END sentenciaEnd]

    WHEN condicion

           sentencia1 (ó NEXT SENTENCE)

[END-SEARCH]

Adjunto abajo el documento de la Asociación Española de Banca que explica cómo comprobar si un IBAN es correcto.

Preguntas en modo TEST sobre los conceptos de codificación COBOL aprendidos hasta el momento.

En esta clase introductoria establecemos las bases de conocimiento básicas el control de trabajos en un Mainframe. En particular, nos referiremos al subsistema de control de trabajos del MVS, el JES.

Tomando como ejemplo algunos de los JCL que ya hemos hecho para poder ejecutar nuestros COBOLs de la sección anterior, nos iniciamos en la sintaxis básica del Lenguaje JCL.

Comenzamos a entrar en el detalle de la sintaxis de las intrucciones JCL y su estructura:

ESTRUCTURA: un JCL siempre debe comenzar por una (y sólo una) sentencia de cabecera JOB. Tras la cabecera, pueden haber N sentencias EXEC. Asimismo, por cada fichero utilizado, debe usarse una sentencia DD, necesaria para describir los ficheros con los que se va a trabajar.

COMANDOS: cada sentencia JCL posee parámetros de palabra clave. Veremos algunos de los más importantes: CLASS, MSGCLASS, NOTIFY, TIME, REGION, PRTY, TYPRUN, PARM, DISP, DCB... pero no todos, porque la lista es interminable.

PD: en caso de programas COBOL con ficheros (siguiente Sección del curso), la sentencia DD identifica el fichero lógico definido en la SELECT del batch con su fichero físico JCL. Como veremos, es fundamental que tengan el mismo nombre, ya que, de lo contrario, ¡el programa no encontrará el fichero!

Para poner en práctica lo aprendido en las primeras clases de la sección, vamos a crear un primer JCL básico que sea capaz de sacar un mensaje "Hola Mundo!" por pantalla (desde el spool). Para ello, utilizaremos el comando delimitador DL=$$, una técnica poco conocida en JCL (ya que no es este tipo de montaje el uso habitual de un job) pero muy sencilla y potente.

Para ello utilizaremos la utilidad IEBGENER de JCL predefinida en el MVS (podéis verla en la librería SYS1.LINKLIB). No os preocupéis por ella: en el siguiente capítulo la explico con todo lujo de detalle.

La utilidad IEBGENER realiza varias funciones y vamos a aprender a utilizarlas en este capítulo:

  • Crear una copia de un SDS o de miembro(s) de un PDS.

  • Crear un PDS, o miembro(s) de un PDS, a partir de un SDS.

  • Añadir miembros a un PDS.

  • Generar un output editado de un fichero, ya sea secuencial o particionado.

  • Modificar las longitudes de registro (LRECL) de un fichero.

Por si acaso: SDS significa sequential data-set (es decir, fichero secuencial, DSORG=PS). Análogamente, PDS son las siglas de partitioned data-set (es decir, fichero particionado, DSORG=PS).

Nos enfrentamos ahora a la utilidad IEBCOPY, fundamental para manipular ficheros PDS. Sus funciones son:

  • Copiar de un PDS a otro PDS o a un SDS.

  • Copiar de uno o varios SDS a un PDS.

  • Mergear ("unir") varios PDS en un único PDS.

  • Comprimir un PDS (básicamente, lo copiamos sobre sí mismo).

  • Reemplazar o renombrar miembros de un PDS.

Para poder ejecutar alguna de estas acciones, la definición de la SYSIN va a ser fundamental:

  • Parámetro COPY, para copiar un PDS:

    • OUTDD: indica el fichero de output.

    • INDD: indica el/los fichero/s de input.

    • COPY OUTDD=nombreDD
      INDD=(nombreDD,(nombreDD,R),…)

  • Parámetro SELECT, donde especificamos los nombres de los miembros de los ficheros de entrada que se van a copiar (por supuesto, no estamos forzados a copiarlos todos!).

  • Parámetro EXCLUDE: donde especificamos los nombres de los miembros que se excluirán del copiado.

Una utilidad poco conocida y sencilla muy similares a las anteriores es IEBCOMPR. Su utilidad radica en la comparación de ficheros, ya sean PDS o SDS. Deberemos indicarle el tipo de ficheros a comparar por SYSIN.

Devuelve un código de retorno 0 cuando los ficheros son iguales; 8 cuando no lo son.

Esta utilidad lista los directorios de un PDS o bien los contenidos de la tabla de un volumen (VTOC):

  • LISTPDS lista el directorio del PDS, donde pueden observarse los miembros del fichero.

  • LISVTOC lista la VTOC completa de un volumen en un disco (o parte de la misma). El formato por defecto es DUMP (hexadecimal), pero forzando FORMAT  saca un listado legible.

Esta utilidad es bastante peculiar porque no hace nada en particular: es un comodín.

A nivel de sistema, lo que hace es saltar al registro 14 del procesador (Branch Register 14), donde está... la dirección de retorno del Master Scheduler. Es decir: la ejecución del IEFBR14 hace que devuelva el control al planificador del sistema (ir y automáticamente, volver, sin hacer nada). Entonces, ¿para qué diantres sirve?

Pues resulta que en un entorno MVS nos podemos aprovechar su potencial para, por ejemplo, crear un fichero en un paso y no queremos que haga nada más.

Como ya hemos visto, en JCL no es posible definir sentencias DD sin ficha EXEC: precisamente IEFBR14 viene a suplir esta carencia, ya que creando pasos de tipo EXEC PGM=IEFBR14 vamos a borrar o catalogar ficheros!

La utilidad IDCAMS tiene varias funciones:

  • Definir y borrar ficheros VSAM.

  • Copiar un fichero en otro.

  • Listar catálogos.

  • Imprimir ficheros.

  • Transferir ficheros de un sistema a otro.

Veremos algunas de ellas en esta clase.

Primera toma de contacto con la manipulación directa de ficheros, en particular, de la sentencia directa SORT desde el CMD del TSO. Esto nos permite visualizar de manera directa el efecto de ejecución de una sentencia de ordenación. Estas mismas sentencias las programaremos en los siguientes capítulos en trabajos JCL.

Se trata de la sentencia SORT más sencilla de todas: copiar un fichero en otro tal y como se lee desde la entrada.

La sentencia SORT FIELDS=(inicio, longitud, tipo, orden) nos permite indicar por qué campos queremos ordenar un fichero. Dichos campos son especificados en la sentencia de la siguiente manera:

  • Posición de inicio

  • Longitud del campo

  • Tipo de campo (binario BI, decimal ZD, empaquetado PD, carácteres CH...)

  • Tipo de ordenación: ascendente (A) o descendente (D).

La sentencia INCLUDE COND=(inicio, longitud, tipo, operador comparación, valor) nos permite incluir en el fichero de salida únicamente los registros que cumplen la condición especificada. Se trata de una sintaxis muy similar a la vista en la clase anterior, con la salvedad de que ahora, además, hemos de ligar las diferentes condiciones con operadores lógicos, que pueden ser AND o OR.

Asimismo, la sentencia OMIT COND nos permite excluir aquellos registros que cumplan la condición especificada. Huelga decir que tiene el mismo formato que la sentencia de inclusión.

En este capítulo veremos cómo dividir un fichero de entrada en varios ficheros de salida utilizando la sentencia OUTFILE junto con FNAMES. Por supuesto, podremos tener N ficheros de salida, cada uno de ellos con un nombre exclusivo y por tanto diferente al resto.

La sentencia OUTREC FIELDS=(posición, longitud) sirve para formatear el registro de salida de un fichero al ejecutar un SORT, algo muy utilizado en la generación de interfases o comunicación de datos entre una empresa y ciertos organismos públicos (Hacienda, DGT, Juzgados) o privados (listados de morosidad, datos médicos, etc). En efecto, suele ser habitual no querer el mismo formato a la salida que el recibido por la entrada.


Asimismo, la sentencia INREC FIELDS nos permite formatear los registros antes de ordenarlos. Es poco utilizada por motivos obvios. Por supuesto, tiene el mismo formato que la sentencia OUTREC FIELDS.

En este capítulo abundamos en la edición de campos numéricos utilizando OUTREC. En particular, veremos cómo podemos editar mediante la sentencia EDIT=(...), especificar el signo de una cantidad positiva o negativa al principio o al final de la misma mediante la sentencia SIGNS=(...), ajustar la longitud de salida utilizando la sentencia LENGTH y convertir campos utilizando la sintaxis formato_origen,TO=formato_destino.

La sentencia SUM FIELDS=(posición inicio campo, longitud, tipo) nos permite sumar los valores del campo que comienza en la posición indicada y que ocupa los bytes indicados. Por supuesto, sólo se pueden sumar campos numéricos, empaquetados o decimales, de lo contrario se obtendrá un abend en la ejecución del JCL.

La sentencia SUM FIELDS=NONE sirve para elimina registros duplicados: ¡este es un truco muy, muy utilizado!

En este capítulo nos introducimos brevemente en las ejecuciones condicionales de pasos en trabajos JCL, prestando especial interés en su sintaxis básica.

Los ficheros generacionales (GDG, Generation Data Group) son ficheros que constan de un grupo de archivos que están funcional y cronológicamente relacionados entre sí (¡no son ficheros VSAM!).

Su utilización es frecuente en cualquier empresa y/o mainframe, así que he considerado explicar brevemente cómo JCL es capaz de trabajar con ellos. En particular, vamos a ver cómo crear, modificar, copiar y borrar GDGs desde el lenguaje de control de trabajos.

En esta clase nos adentramos en cómo tratar desde los fuentes COBOL ficheros de entrada y salida (E/S). Os explico los tipos de organización que puede tener un fichero, su relación con las organizaciones de la instalación y los posibles modos de acceso.

Veremos cómo codificar la sección de entrada y salida: la INPUT-OUTPUT SECTION. En particular, explico con detalle la sintaxis y utilidad del párrafo FILE-CONTROL, formado exclusivamente por sentencias SELECT, viendo con detalle su formato:

  • Cláusula ASSIGN

  • Cláusula ORGANIZATION

  • Cláusula ACCESS

  • Cláusula RECORD KEY

  • Cláusula FILE STATUS

Asimismo, explico la FILE SECTION o sección de ficheros de un programa COBOL, necesaria para describir la información referente a los ficheros utilizados:

  • FD, nombre del fichero

  • Cláusula LABEL RECORD

  • Cláusula RECORDING MODE

  • Cláusula BLOCK CONTAINS

  • Cláusula RECORD CONTAINS

Para realizar operaciones sobre ficheros en un programa COBOL, es necesario, además de definirlos como hemos visto en la clase anterior, abrirlos en la propia WORKING-STORAGE SECTION. Por ello, en esta clase tomando un ejemplo ya hecho os explico la sentencia OPEN y sus posibles formatos. Algunos de ellos son:

OPEN INPUT fichero REVERSED WITH NO REWIND

OPEN I-O fichero WITH LOCK...

OPEN EXTEND fichero

...

Una vez aperturado el fichero, ya podremos leer/grabar/borrar/updatear etc sobre él.

Por último, al acabar las operaciones, es necesario cerrar el/los ficheros aperturados. Para ello utilizamos la sentencia CLOSE. Es importante no olvidarnos nunca de cerrar los ficheros, ya que aunque la primera ejecución del programa sería satisfactoria, la segunda y posteriores no lo serían porque al intentar abrir un fichero que ya está abierto (pues no ha sido cerrado) obtenemos un FILE-STATUS = 41.

Lectura de un fichero secuencial mediante la sentencia READ.

PD: en muchos programas COBOL es usual ver cómo el programador inicializa el registro del fichero antes de ejecutar la(s) lectura(s), pero es inútil. Por eso no lo he hecho en el ejemplo y, aunque toca el buffer, recomiendo no hacerlo nunca.

Sobre el programa de la clase anterior, añadimos en el fichero un nuevo campo "salario" de tipo numérico. A la hora de mostrar campos numéricos, es muy frecuente querer editarlos. Por ejemplo, al extender cheques, si la cantidad son 1.200€ y el campo acepta un PIC S9(9), sería poco seguro que la cantidad esté escrita de la forma "_____1200€", ya que alguien podría escribir ¡nueves por delante! Una posible solución sería rellenar con asteriscos, "*****1200€". Esto se consigue con la máscara PIC ********9.

En los recursos adjuntos a esta clase os dejo un documento con una colección amplia de máscaras COBOL y el resultado que generan.

En esta clase os explico cómo grabar ficheros (secuenciales) de salida en un batch que contiene como entrada otro PS. Para ello, es preciso utilizar la sentenci WRITE reg-FICHERO INTO datos.

¡Corrección! En la clase anterior el fuente con nombre PBC1N08 contiene el código del PBC1N07 y viceversa. La generación accidental de este cruce nos provocaba la compilación del código del programa anterior en el nuevo objeto.

En esta brevísima clase recompilamos el objeto correcto y visualizamos el PS de salida con el contenido indicado en el fuente.

No podemos borrar registros de un fichero secuencial utilizando la sentencia DELETE. Esta sentencia existe, pero sólo es utilizable con ficheros cuya organización es indexada o relativa (y además debe estar abierto en modo I-O).

La llamada a subprogramas/rutinas ("módulos aplicativos") desde un programa "principal" (main-program) se consiguen mediante la sentencia CALL. Veremos que hay dos tipos principales de llamadas, estáticas y dinámicas. En la mayoría de empresas, están prohibidos los programas con llamadas estáticas a módulos; ¡es mucho mejor hacer las llamadas dinámicas!

Básicamente, esto es debido a que en una llamada estática la linkedición del main necesita que exista disponibilidad del módulo, aumentando así el tiempo de linkedición. Además, el módulo pasa a formar parte del load, aumentando por tanto su tamaño en memoria...¡aunque no se use! Si la llamada se especifica de manera dinámica, el módulo sólo se carga en memoria si se usa, con lo que el SO puede gestionar con más eficiencia la memoria (no usa espacio en disco duplicado como en las llamadas estáticas).

Ejecución del módulo de traducción de euros a pesetas con algunas cantidades de ejemplo

Código fuente de todos los JCLs desarrollados durante el curso.

Objetos (linkediciones) de todos las compilaciones de fuentes COBOL desarrollados durante el curso.

Ficheros generados durante el curso.

Examen Final. Consta de 10 preguntas tipo test. La mitad más una de preguntas contestadas correctamente implica la obtención del aprobado y el consiguiente certificado de finalización del curso.

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Teaches how to install a Mainframe MVS emulator on a PC, which allows learners to practice and experiment with COBOL programming in a realistic environment
Explores the ISPF navigation system, which is essential for managing files and datasets within the TSO environment on mainframes
Covers the creation of JCL executables, which are necessary for compiling and testing COBOL programs within the mainframe environment
Explains how to develop and execute COBOL programs using structured programming techniques, which promotes maintainability and readability
Requires learners to download an emulator and operating system image from P2P networks, which may pose legal and security risks
Focuses on older technologies like MVS, which may not be relevant for learners interested in modern software development practices

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Curso completo cobol y jcl en mainframe

Según la descripción del curso, está diseñado para enseñar COBOL y JCL en entornos mainframe MVS, un nicho laboral relevante en finanzas y grandes corporaciones. Destaca por su guía de instalación de un emulador en PC, permitiendo práctica práctica sin acceso real a mainframe. Cubre la sintaxis de COBOL desde lo básico a intermedio, estructuras de datos, programación estructurada, manejo de ficheros secuenciales e indexados y llamadas a submódulos (sentencia CALL). También aborda en profundidad las utilidades principales de JCL. Aunque se omitió DB2/SQL (para un futuro curso), se presenta como un recurso completo y práctico, enfocado en llenar un vacío de recursos en español. El instructor muestra un fuerte compromiso.
Instructor dedicado y accesible.
"Si tenéis cualquier duda o sugerencia relacionada con el curso, podéis poneros en contacto conmigo a través de mensaje privado"
"si alguien de verdad necesita poder realizar el curso y no dispone de los medios económicos, que se ponga en contacto conmigo y concederé acceso totalmente gratuito."
Muchos ejemplos y ejercicios reales.
"todo ello haciendo ejemplos continuamente"
"haremos ejemplos continuamente para ver "en vivo" su funcionamiento"
"EJERCICIO 1. Consolidación de conceptos: responder a las cuestiones"
Cubre COBOL y JCL en detalle.
"Se trata del videocurso en español más completo existente sobre COBOL en toda la red, con explicaciones muy pormenorizadas y detalladas de su sintaxis."
"iremos complicando paulatinamente el código de nuestros programas hasta abarcar prácticamente todo el lenguaje de programación."
"Conocer y utilizar las principales utilidades JCL: IEFBR14, IDCAMS, SORT, IEBGENER, IEBCOPY..."
Guía práctica para instalar emulador.
"El primer paso para instalar el entorno de trabajo es descargar un emulador. En esta clase os guío en la instalación del emulador hércules"
"Ya tenemos todo el entorno instalado! Ahora ingresaremos por primera vez en el MVS"
Contenido de DB2 se movió.
"he decidido no introducir aquí también el uso de DB2/SQL."
"Se verá cómo manejar una base de datos desde el Mainframe ... en otro curso que desarrollaré en el futuro."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Curso completo de COBOL y JCL with these activities:
Repasar los fundamentos de la arquitectura Mainframe
Refrescar los conceptos básicos de la arquitectura mainframe para comprender mejor el entorno en el que se ejecuta COBOL y JCL.
Browse courses on Mainframe
Show steps
  • Leer artículos introductorios sobre la historia y la arquitectura de los mainframes.
  • Identificar los componentes clave de un sistema mainframe típico.
  • Comprender la diferencia entre MVS y z/OS.
Revisar 'COBOL for the 21st Century'
Profundizar en el conocimiento de COBOL con un libro de texto ampliamente utilizado.
Show steps
  • Leer los capítulos sobre la sintaxis básica de COBOL.
  • Estudiar los ejemplos de código proporcionados en el libro.
  • Realizar los ejercicios al final de cada capítulo.
Leer 'JCL Programmer's Guide'
Ampliar el conocimiento de JCL con una guía práctica.
Show steps
  • Leer los capítulos sobre la sintaxis de JCL.
  • Estudiar los ejemplos de JCL proporcionados en el libro.
  • Experimentar con diferentes opciones y parámetros de JCL.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Practicar ejercicios de JCL
Reforzar las habilidades de JCL mediante la resolución de ejercicios prácticos.
Show steps
  • Escribir JCL para compilar y ejecutar programas COBOL.
  • Crear JCL para manipular archivos y conjuntos de datos.
  • Utilizar utilidades JCL como IEBGENER e IEBCOPY.
  • Resolver problemas de JCL comunes.
Crear un blog sobre COBOL y JCL
Consolidar el aprendizaje mediante la creación de contenido educativo sobre COBOL y JCL.
Show steps
  • Elegir una plataforma de blogging (por ejemplo, WordPress, Medium).
  • Escribir artículos sobre temas específicos de COBOL y JCL.
  • Compartir ejemplos de código y explicaciones claras.
  • Publicar regularmente y promocionar el blog.
Desarrollar una aplicación COBOL sencilla
Aplicar los conocimientos adquiridos en el curso para construir una aplicación COBOL funcional.
Show steps
  • Definir los requisitos de la aplicación.
  • Diseñar la estructura de la aplicación y los archivos de datos.
  • Escribir el código COBOL y JCL necesario.
  • Probar y depurar la aplicación.
  • Documentar el proyecto.
Crear una guía de referencia rápida de COBOL y JCL
Sintetizar el conocimiento del curso en una guía concisa y útil.
Show steps
  • Revisar las notas del curso y los ejemplos de código.
  • Identificar los conceptos y comandos más importantes.
  • Organizar la información en una guía de referencia fácil de usar.
  • Compartir la guía con otros estudiantes.

Career center

Learners who complete Curso completo de COBOL y JCL will develop knowledge and skills that may be useful to these careers:
Programador de Mainframe
Un programador de mainframe trabaja con sistemas informáticos grandes y potentes, a menudo utilizados por bancos, instituciones financieras y grandes corporaciones. Este curso es perfecto para alguien que aspira a ser programador de mainframe, ya que proporciona una base sólida en COBOL y JCL, que son esenciales para el desarrollo y mantenimiento de aplicaciones en este entorno. El curso, con su enfoque práctico, permite a los estudiantes empezar a programar en un emulador de mainframe, instalar un sistema operativo, navegar por TSO y desarrollar programas básicos en COBOL, aprendiendo también a editar y manipular ficheros a través de JCL.
Analista de Sistemas Mainframe
Un analista de sistemas mainframe analiza, diseña e implementa sistemas informáticos a gran escala. Este curso puede ser muy útil para un analista de sistemas mainframe ya que ofrece una visión profunda del funcionamiento del sistema mainframe, además de conocimientos prácticos en COBOL y JCL. Aprender a instalar un mainframe en un PC, a navegar por el TSO y a crear programas COBOL son habilidades muy valiosas para analizar el comportamiento y la estructura de las aplicaciones mainframe. Con este curso, un futuro analista de sistemas puede entender cómo un sistema mainframe maneja la información.
Desarrollador de Software Legacy
Un desarrollador de software legacy se centra en el mantenimiento y mejora de sistemas informáticos antiguos. Este curso, al introducir COBOL y JCL, es ideal para un desarrollador de software legacy que necesite trabajar con sistemas basados en mainframe. Dominar la sintaxis de COBOL y la gestión de trabajos con JCL son esenciales para realizar modificaciones sobre sistemas legacy. Este curso ayuda a los alumnos a entender cómo se ejecutan los programas y cómo gestionan ficheros en sistemas mainframe, habilidades clave en el trabajo de un desarrollador de software legacy.
Especialista en Migración de Sistemas Mainframe
Un especialista en migración de sistemas mainframe es responsable de la transición de aplicaciones antiguas de mainframe a nuevas plataformas. Este curso es un buen punto de partida para un especialista en migración, ya que ofrece una comprensión detallada del lenguaje de programación COBOL y JCL, que son la base de muchas aplicaciones mainframe heredadas. Dominar estas tecnologías es esencial para reescribir o mover aplicaciones a diferentes entornos. La capacidad de entender la lógica de los programas COBOL y la forma en que operan con archivos y trabajos mediante JCL es fundamental en el proceso de migración.
Consultor de Sistemas Mainframe
El consultor de sistemas mainframe asesora a las empresas en la gestión y optimización de sus sistemas centrales. Este curso puede ser útil para un consultor de sistemas mainframe. El conocimiento profundo del lenguaje COBOL y JCL, junto con la capacidad de trabajar en ISPF, son muy importantes para evaluar y entender la infraestructura de un mainframe. Un consultor debe tener un conocimiento exhaustivo y este curso permitirá entender tanto el desarrollo de programas COBOL como el uso de JCL para la gestión de ficheros, elementos clave en el entorno de mainframe.
Administrador de Sistemas Mainframe
Un administrador de sistemas mainframe se encarga de la operación y mantenimiento de sistemas informáticos a gran escala. Este curso puede ser de utilidad para un administrador de sistemas mainframe ya que proporciona una base sólida en las herramientas y técnicas necesarias para la gestión de estos sistemas. Aprender a instalar un emulador de mainframe, a navegar por el TSO y a ejecutar programas COBOL y JCL ayuda a los futuros administradores a comprender y mantener el sistema de manera eficiente. La manipulación de ficheros a través de JCL es una tarea que un administrador tendrá que realizar.
Probador de Software Mainframe
Un probador de software mainframe es responsable de garantizar la calidad y el correcto funcionamiento de las aplicaciones en sistemas centrales. Este curso puede ser útil para un probador de software mainframe ya que proporciona una comprensión de la estructura y el funcionamiento de los programas COBOL, así como de la ejecución de trabajos JCL. Familiarizarse con la compilación, la ejecución y la gestión de ficheros desde un entorno mainframe facilita la labor de prueba, especialmente cuando se requiere la ejecución batch o el análisis de ficheros. Con este curso, un futuro probador puede entender cómo funcionan los programas internamente.
Analista de Datos Mainframe
El analista de datos de mainframe trabaja con grandes conjuntos de datos almacenados en estos sistemas. Si bien este curso no se centra en el manejo de datos en el sentido más moderno, puede ser útil para un analista de datos de mainframe. Entender cómo los programas COBOL acceden y modifican los datos, así como la manera en que JCL gestiona ficheros, es útil para comprender la estructura de los datos dentro del mainframe. El curso puede ayudar a los analistas a entender cómo se organizan y procesan grandes volúmenes de datos, lo que puede contribuir a la extracción y análisis de la información.
Ingeniero de Sistemas Mainframe
Un ingeniero de sistemas mainframe se encarga de la infraestructura y el diseño de sistemas informáticos a gran escala. Este curso puede ser útil para un ingeniero de sistemas mainframe, ya que proporciona conocimientos prácticos sobre cómo trabajar con sistemas mainframe. Aprender a instalar un emulador de mainframe, a escribir programas COBOL y ejecutar trabajos JCL ayuda a los ingenieros a comprender los componentes de un mainframe y cómo interactúan entre sí. Con este curso, un ingeniero de sistemas puede conocer más en detalle cómo se gestiona un sistema mainframe.
Arquitecto de Software Mainframe
Un arquitecto de software mainframe diseña la estructura y los componentes de las aplicaciones para sistemas centrales. Este curso puede ser útil para un arquitecto de software mainframe al ofrecer una visión práctica de cómo los programas COBOL se estructuran y operan en un entorno mainframe. Entender cómo gestionar ficheros y trabajos, usando JCL, ayuda a los arquitectos a pensar en diseños que sean eficientes para sistemas mainframe. Al conocer la estructura y la sintaxis de COBOL, un arquitecto puede tomar decisiones más informadas sobre la arquitectura de las aplicaciones.
Técnico de Soporte Mainframe
Un técnico de soporte mainframe es responsable de la resolución de problemas y del apoyo a usuarios en sistemas mainframe. Este curso, con su contenido práctico en COBOL y JCL, puede ser útil para técnicos de soporte mainframe, ya que les permite tener un entendimiento más profundo de cómo funcionan los sistemas. Al saber cómo se ejecutan los programas, cómo se gestionan los ficheros y cómo hacer uso del JCL, un técnico de soporte puede ofrecer una asistencia más efectiva. El curso ofrece las bases para comprender los errores y problemas que se pueden encontrar en el entorno mainframe.
Formador en COBOL
Un formador en COBOL se dedica a la enseñanza a otras personas sobre este lenguaje de programación. Este curso, al ser completo con la instalación de un emulador, el uso del TSO y el desarrollo de programas COBOL, puede sentar las bases para llegar a ser un formador en la materia. La capacidad de explicar conceptos básicos como la sintaxis, las estructuras de datos y el manejo de archivos en JCL es esencial. Este curso, al ser completo, proporciona a sus usuarios el conocimiento necesario para formar a otros en el lenguaje COBOL.
Especialista en Sistemas Financieros
Un especialista en sistemas financieros se encarga de la gestión y el mantenimiento de los sistemas informáticos utilizados en el sector financiero. Aunque este curso se centre en COBOL y JCL, puede ser útil para un especialista en sistemas financieros ya que muchos sistemas de este sector utilizan mainframes. Saber cómo funcionan los programas COBOL y cómo interactúan con los ficheros a través de JCL, da una visión global a este profesional. El curso puede ayudar a comprender la infraestructura subyacente en el entorno financiero.
Responsable de Operaciones de Mainframe
Un responsable de operaciones de mainframe supervisa el funcionamiento diario de los sistemas centrales. Este curso puede ser útil para un responsable de operaciones de mainframe al ofrecer conocimientos prácticos en programación COBOL y la gestión de trabajos con JCL. Supervisar el rendimiento, la programación de trabajos y la gestión de recursos, necesita de un conocimiento de cómo se ejecutan los programas y cómo los ficheros son manejados en el entorno mainframe. Un responsable de operaciones se beneficiaría de la perspectiva que proporciona este curso.
Técnico de Mantenimiento de Mainframe
Un técnico de mantenimiento de mainframe es responsable de mantener y reparar los sistemas informáticos centrales. Aunque este curso se enfoca en COBOL y JCL, puede ser útil para un técnico de mantenimiento de mainframe. Entender la estructura de los programas COBOL y cómo manejar ficheros con JCL, proporciona una valiosa visión de la operación del sistema. Esto puede ayudar a identificar problemas y aplicar soluciones más rápidas. Para un técnico de mantenimiento, la perspectiva que ofrece este curso puede ser valiosa.

Reading list

We've selected one books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Curso completo de COBOL y JCL.
Este libro proporciona una cobertura completa del lenguaje COBOL, incluyendo las últimas características y estándares. Es útil para comprender la sintaxis y las mejores prácticas de COBOL. El libro también cubre temas avanzados como el manejo de archivos y bases de datos, lo que complementa el contenido del curso. Es un recurso valioso tanto para principiantes como para programadores experimentados.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser