El lenguaje de programación COBOL cumple este año 63 años, ya que fué diseñado en el año 1959 por el comité CODASYL (tal vez el único lenguaje diseñado por un comité...).
Este lenguaje (COmmon Business Language), como su nombre lo indica, fué creado especificamente para aplicaciones de negocio, por lo que no es un lenguaje de propósito general como c, java, etc.
A pesar del tiempo transcurrido desde su creación,COBOL todavía está muy vigente en la actualidad, en sectores del mercado como: finanzas, bancos, seguros, entidades gubernamentales, etc.
Se pueden encontrar referencias en internet que mencionan que hoy en día existen más de 200 mil millones de lineas de COBOL en aplicaciones "activas". Para un lenguaje con 63 años, ciertamente es un número impresionante. Esas mismas fuentes mencionan que se sigue desarrollando en este lenguaje, aunque la mayor parte de estos desarrollos corresponden a mantenimiento o mejoras de las aplicaciones ya existentes.
Este proyecto tiene por objeto desarrollar un ETL (como se dice actualmente) que lea varios archivos, realice ciertas transformaciones y genere un archivo final, todo ello en COBOL.
Es un simple ejercicio para ver como se puede hacer con un lenguaje de 63 años sin utilizar librerías externas ni BBDD, solo utilizando el core del lenguaje.
La base teórica del proyecto es una empresa telefónica ficticia que requiere generar todos los meses un informe con la facturación resumida de sus clientes, algo así como el archivo a enviar al banco para que proceda con los cargos en cuenta correspondientes al consumo mensual.
Tenemos cuatro archivos de entrada:
- CLIENTES.DAT : Archivo con datos de clientes
- TELEFONOS.DAT: Archivo con los números de telefono de cada cliente.
- TARIFAS.DAT: Archivo con las tarifas a aplicar.
- LLAMADAS.DAT: Archivo con el detalle de cada llamada registrada en el mes a facturar.
Estos archivos son de texto, con registros de campos de longitud fija.
El primer paso consiste en crear archivos indexados (VISAM) a partir de los tres primeros archivos planos, esto con el objeto de facilitar las búsquedas.
Una vez que hemos creado los archivos indexados procesamos el cuarto archivo, para determinar el cliente del teléfono que llama, la duración de la llamada y el importe de la misma. En este paso se genera el archivo de texto LLAMADAS-CLI.DAT.
A continuación ordenamos este archivo por cliente y número de teléfono y generamos un último archivo con el resumen por cliente, agregando el nombre del mismo y su cuenta bancaria: LLAMADAS-CLI-M.DAT.
He utilizado el compilador GnuCOBOL V-3.1.2.0 y el IDE específico para COBOL OpenCobolIDE V-4.7.6 :
También se puede utilizar el editor de programación Geany:
Es muy probable que si estamos trabajando en un ambiente real utilicemos Visual Studio Code, ya que disponemos de una serie de accesorios que facilitan en gran medida trabajar en mainframes (nicho por excelencia de aplicaciones en COBOL).
Un ejemplo de los archivos utilizados sería:
Y a continuación el programa en COBOL:
SI este fuese un proyecto real, deberíamos hacer validaciones previas a los archivos de entrada, con el objeto de identificar registros con errores o incompletos y tomar alguna acción.
De nuevo, este proyecto es una ejercicio de fin de semana para recordar viejos tiempos (nostalgia, nostalgia ...)
Dejo algunos enlaces interesantes: