Hello world e IDENTIFICATION DIVISION - Curso de COBOL y PowerCOBOL desde cero - Capítulo 6

En este capítulo vas a ver para que sirve la IDENTIFICATION DIVISION de COBOL. Además, ejecutarás tu primer programa con un mensaje en la consola.

Crear un archivo nuevo de COBOL

Empecemos creando un nuevo archivo en OpenCobolIDE. Hazlo como te mostré, desde el menú "File" o bien pulsando las teclas CTRL+N

Archivo nuevo de COBOL

Elije de "Template" (plantilla), "Program" (programa). Ponle un nombre con la extensión .cbl y selecciona el directorio para crear el archivo. Haz click en "OK" cuando lo tengas todo.

Se te creará un archivo como este:

Código COBOL

      ******************************************************************
      * Author:
      * Date:
      * Purpose:
      * Tectonics: cobc
      ******************************************************************
       IDENTIFICATION DIVISION.
       PROGRAM-ID. YOUR-PROGRAM-NAME.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
            DISPLAY "Hello world"
            STOP RUN.
       END PROGRAM YOUR-PROGRAM-NAME.

Las líneas 1-6 son comentarios. Las puedes borrar.

Te quedará el código así:

Código COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. YOUR-PROGRAM-NAME.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
            DISPLAY "Hello world"
            STOP RUN.
       END PROGRAM YOUR-PROGRAM-NAME.

Este programa está listo para compilar. Lo puedes ejecutar haciendo click en el símbolo verde o pulsando la tecla F5 .

terminal Resultado en la consola terminal

Lo que hace es imprimir el mensaje "Hello world" en la consola, gracias al DISPLAY de la línea 8.

DISPLAY puede traducirse como mostrar.
D:\Users\PF\bin\test1.exe
Hello world

Process finished with exit code 0

En la línea 1 del resultado, aparece la ruta del ejecutable que se ha generado.

El la línea 4 nos indica el código del proceso, si es 0 es que todo está correcto.

A partir de aquí, voy a obviar estas dos líneas en los resultados.

Para quienes ya programan, este DISPLAY, puede considerarse como un print, un método típico de la mayoría de lenguajes de programación.

Codificación de caracteres en OpenCobolIDE

Cambia el valor "Hello world" por cualquier otra frase respetando las comillas " " y vuelve a ejecutar el programa.

Código COBOL

DISPLAY "Curso de COBOL en Programación Fácil"

terminal Resultado en la consola terminal

Funciona correctamente, pero si has utilizado acentos como yo, verás que la codificación por defecto (windows-1252), no los soporta.

Curso de COBOL en Programaci¾n Fßcil

Ves a la zona de codificación que te mostré anteriormente y pon la codificación UTF-8.

Tras cambiar la codificación, se estropea todo el código y aparece así:

Código COBOL

b'       IDENTIFIC'

Esto es por falta de alguna funcionalidad en OpenCobolIDE que transforme los caracteres a las diferentes codificaciones.

Deshaz para dejar el código como antes del error. Quita los caracteres incompatibles (en este caso los dos acentos) y cambia de codificación a UTF-8. Recuerda que esto está en el menú "Edit" > "Active editor" > "Encodings".

terminal Resultado en la consola terminal

¡Perfecto! Se muestra correctamente.

Curso de COBOL en Programación Fácil

Recuerda que la codificación de caracteres con la que estás trabajando en OpenCobolIDE aparece en la esquina inferior derecha:

Codificación UTF-8 acentos Opencobol

Las divisiones de COBOL

Analicemos este sencillo programa viendo cada una de las divisiones, que gracias a esta plantilla "Program" de OpenCobolIDE ya están escritas y en el orden correcto, si no, tendrías que escribir todo esto cada archivo de COBOL que crearas.

En este capítulo en concreto verás la IDENTIFICATION DIVISION. En los siguientes, iremos con el resto.

IDENTIFICATION DIVISION

La IDENTIFICATION DIVISION (división de identificación) es la que contiene información sobre el programa.

Hay que especificarla en la primera línea del programa. No obstante, esta división no es obligatoria de forma estricta, la puedes eliminar y en teoría no pasa nada. Sin embargo, tenemos el párrafo PROGRAM-ID (Identificador de programa) que si que es obligatorio, por lo que es mejor siempre especificar la IDENTIFICATION DIVISION para no crear errores inesperados.

Haz la prueba, retira la línea de la IDENTIFICATION DIVISION y ejecuta de nuevo.

No ocurre nada, todo funciona correctamente. Ahora, vuleve a colocarla.

Y ahora, borra la línea de PROGRAM-ID. ¿Qué ocurre?

terminal Resultado en la consola terminal

Error de sintaxis, inesperada DATA, que se refiere a la palabra DATA que se encuentra en donde el compilador espera que esté FUNCTION-ID O PROGRAM-ID.

 (línea 3) syntax error, unexpected DATA, expecting FUNCTION-ID or PROGRAM-ID

Ya que estamos con PROGRAM-ID te explico que es para el nombre del programa. Algo que me parece genial, esto ya no se estila en ningún lenguaje de programación que conozca (el nombre suele ser el nombre de archivo). Puede parecer algo inútil, pero no lo es, el identificador (nombre único) que le demos al programa, nos servirá más adelante para realizar importaciones de archivos de COBOL. Además, el toque que le da me encanta.

Cambiemos el nombre. Este deberá seguir unas normas de nomenclatura.

  • Los nombres de programa no pueden contener espacios en blanco.
  • Aunque se admite un PROGRAM-ID que empiece por un número, no lo recomiendo por posibles errores más adelante.
  • Lo mismo digo con los acentos en codificación UTF-8, se puede, pero mejor no los usues.
  • No admiten la mayoría de símbolos. Por ejemplo, el $ o /.

En cualquier caso, si te da un error en PROGRAM-ID es que has puesto el nombre con algo incorrecto.

También puedes recibir este error:

terminal Resultado en la consola terminal

END PROGRAM (instrucción fin de programa) 'NOMBRE-PROGRAMA' es diferente a PROGRAM-ID 'OTRO-NOMBRE-PROGRAMA'.

Básicamente, nos está avisando de que la instrucción END PROGRAM tiene un nombre diferente a PROGRAM-ID.

 END PROGRAM 'NOMBRE-PROGRAMA' is different from PROGRAM-ID 'OTRO-NOMBRE-PROGRAMA'

En conclusión a todo esto, los nombres de PROGRAM-ID y de END PROGRAM deben ser siempre iguales.

Prueba de cambiarle el nombre al programa como hago yo en el siguiente ejemplo:

Código COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROGRAMACION-FACIL.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
            DISPLAY "Curso de COBOL en Programación Fácil"
            STOP RUN.
       END PROGRAM PROGRAMACION-FACIL.

Cambiando de tema, por si no te has fijado, los puntos . son en COBOL el equivalente al punto y coma de la mayoría de lenguajes de programación.

Los puntos finalizan divisiones, secciones, párrafos e instrucciones.

Nombre del autor

Otra cosa que podemos especificar en la IDENTIFICATION DIVISION, es el nombre del autor con la palabra AUTHOR (Autor). Esto es opcional.

Es mejor que sigas las normas de nomenclatura del nombre del programa aquí también. De hecho, las puedes utilizar en todo.

Código COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-6.
       AUTHOR PROGRAMACION-FACIL.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
            DISPLAY "Curso de COBOL en Programación Fácil"
            STOP RUN.
       END PROGRAM CAPITULO-6.

Al escribir el nombre del autor, nos aparecerá marcado en amarillo con un "warning" (advertencia):

Author is obsolete in GnuCobol.

Este warning no tiene gran importancia, ya que los warning no avisan de cosas críticas. En este caso dice que AUTHOR está obsoleto en el estándar GnuCobol que es el que estamos utilizando por defecto en OpenCobolIDE (ya veremos como cambiarlo). Así que lo podemos utilizar básicamente como si fuera un comentario, no afecta en nada más allá de lo informativo. Se han mantenido para proveer compatibilidad a los programas del estándar ANS1974 o anteriores.

GnuCOBOL (anteriormente OpenCOBOL, y por un corto tiempo conocido como GNU Cobol) es una implementación libre del lenguaje de programación COBOL. Fuente: Wikipedia.

Veamos algunos párrafos más, también opcionales.

Fecha de escritura del programa.

Podemos escribir la fecha en que se escribió el programa con DATA-WRITTEN (fecha de escritura). También lo colocaremos en la IDENTIFICATION DIVISION.

Esto también está obsoleto.

Código COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-6.
       AUTHOR PROGRAMACION-FACIL.
       DATE-WRITTEN "08/03/2023".
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
            DISPLAY "Curso de COBOL en Programación Fácil"
            STOP RUN.
       END PROGRAM CAPITULO-6.

Fecha de última modificación del programa

Disponemos de DATE-MODIFIED (fecha de modificación) para indicar la fecha de la última modificación del programa, también obsoleto.

Código COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-6.
       AUTHOR PROGRAMACION-FACIL.
       DATE-WRITTEN "08/03/2023".
       DATE-MODIFIED "29/09/2023".
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
            DISPLAY "Curso de COBOL en Programación Fácil"
            STOP RUN.
       END PROGRAM CAPITULO-6.

Fecha de compilación del programa

Podemos hasta indicar la fecha de compilación del programa con DATE-COMPILED. Otra cosa obsoleta.

Código COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-6.
       AUTHOR PROGRAMACION-FACIL.
       DATE-WRITTEN "08/03/2023".
       DATE-MODIFIED "29/09/2023".
       DATE-COMPILED "30/09/2023".
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
            DISPLAY "Curso de COBOL en Programación Fácil"
            STOP RUN.
       END PROGRAM CAPITULO-6.

Aunque todo esto esté obsoleto, lo puedes seguir utilizando a modo informativo.

Especificar el nombre de la empresa

INSTALLATION nos permite especificar por ejemplo el nombre de la empresa donde se va a instalar y utilizar el programa.

Código COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-6.
       AUTHOR PROGRAMACION-FACIL.
       DATE-WRITTEN "08/03/2023".
       DATE-MODIFIED "29/09/2023".
       DATE-COMPILED "30/09/2023".
       INSTALLATION "Nombre de la empresa".
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
            DISPLAY "Curso de COBOL en Programación Fácil"
            STOP RUN.
       END PROGRAM CAPITULO-6.

Especificar la confidencialidad de un programa

Tenemos más verbos obsoletos como SECURITY. se utiliza a modo de comentario para especificar la confidencialidad que tiene un programa, por ejemplo, si es para fines de software libre podría poner Libre, o si es para una empresa privado.

Código COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-6.
       AUTHOR PROGRAMACION-FACIL.
       DATE-WRITTEN "08/03/2023".
       DATE-MODIFIED "29/09/2023".
       DATE-COMPILED "30/09/2023".
       INSTALLATION "Nombre de la empresa".
       SECURITY "Open source".
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
            DISPLAY "Curso de COBOL en Programación Fácil"
            STOP RUN.
       END PROGRAM CAPITULO-6.

Comentario general sobre el programa

Por último, tenemos REMARKS, el cual nos permite añadir un pequeño comentario general sobre el programa (Otra cosa más obsoleta).

Código COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-6.
       AUTHOR PROGRAMACION-FACIL.
       DATE-WRITTEN "08/03/2023".
       DATE-MODIFIED "29/09/2023".
       DATE-COMPILED "30/09/2023".
       INSTALLATION "Nombre de la empresa".
       SECURITY "Open source".
       REMARKS "Este es un programa de prueba".
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
            DISPLAY "Curso de COBOL en Programación Fácil"
            STOP RUN.
       END PROGRAM CAPITULO-6.

Suficiente para este capítulo. En el siguiente pasamos a ver la ENVIRONMENT DIVISION.