Curso de cobol y powercobol

La división de entorno de COBOL

Capítulo 7: ENVIRONMENT DIVISION

La ENVIRONMENT DIVISION (división de entorno) es la que contiene información sobre el entorno.

Esta división es opcional y contiene dos secciones opcionales dentro de ella. La CONFIGURATION SECTION y la INPUT-OUTPUT SECTION.

Al ser opcional no aparece en la plantilla básica "Program" de OpenCobolIDE. La tenemos que escribir. La colocaremos antes de la DATA DIVISION.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-7.

       ENVIRONMENT DIVISION.

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

CONFIGURATION SECTION

Empecemos con la primera sección, CONFIGURATION SECTION. En ella podemos escribir el párrafo SPECIAL-NAMES que permite especificar detalles del entorno de desarrollo como por ejemplo que alfabeto utilizar, si utilizar punto o coma para los decimales, etc.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-7.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
           SPECIAL-NAMES.
           DECIMAL-POINT IS COMMA.

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

Esto lo que hace es decirle al programa que cuando vayamos a poner un decimal, lo queremos hacer con una coma en lugar de con un punto. Si no especificas este párrafo, se queda por defecto con el punto en los decimales.

SYMBOLIC CHARACTERS

El párrafo SYMBOLIC CHARACTERS sirve para nombrar a caracteres y poder imprimirlos, además de utilizarlos en el programa. Veamos algún ejemplo.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-7.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
           SPECIAL-NAMES.
           DECIMAL-POINT IS COMMA.
           SYMBOLIC CHARACTERS ESPACIO IS 33.

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

¿Qué hace esto?

Con SYMBOLIC CHARACTERS, estoy asignando a ESPACIO (nombre que le he dado yo) el valor 33. ¿De donde sale este valor?

Los valores especificados para este párrafo, serán en código ASCII. Si quieres crear entidades de forma similar como las de HTML para utilizar símbolos, lo puedes hacer declarándolos de esta forma.

American Standard Code for Information Interchange en inglés o Código Estándar Estadounidense para el Intercambio de Información en español), es un código de caracteres basado en el alfabeto latino.

Probemos esto en un DISPLAY. Para utilizar el símbolo, solo tienes que llamar a la constante ESPACIO que he creado.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-7.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
           SPECIAL-NAMES.
           DECIMAL-POINT IS COMMA.
           SYMBOLIC CHARACTERS ESPACIO IS 33.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
           DISPLAY ESPACIO ESPACIO ESPACIO ESPACIO.
           STOP RUN.
       END PROGRAM CAPITULO-7.

Llamamos cuatro veces a ESPACIO y nos lo muestra cuatro veces:

Si estás en el tema oscuro, verás los espacios así. Puedes seleccionar esa parte blanca y contar que hay cuatro espacios.

Espacios en blanco consola COBOL

Si estás en el tema claro de OpenCobolIDE, no distinguirás los espacios, selecciona la misma zona para verlos o cambia al modo oscuro.

Sin embargo, esta especificación no es muy necesaria al menos en este programa, porque los espacios ya son imprimibles en un DISPLAY sin necesidad de hacerlo con un símbolo, sencillamente pulsando la tecla SPACE .

Entonces, ya sabes que con la referencia del código ASCII en la mano (te he dejado el enlace arriba), puedes utilizar cualquiera de sus símbolos en tus programas COBOL.

Hagamos algo más útil, por ejemplo, imprimir la representación de unas comillas angulares » «, las cuales, no están disponibles en el teclado (no son dos mayor o menor qué >> <<).

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-7.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
           SPECIAL-NAMES.
           DECIMAL-POINT IS COMMA.
           SYMBOLIC CHARACTERS ANGULAR-DERECHA IS 176.
           SYMBOLIC CHARACTERS ANGULAR-IZQUIERDA IS 175.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
           DISPLAY ANGULAR-DERECHA " Texto destacado " ANGULAR-IZQUIERDA.
           STOP RUN.
       END PROGRAM CAPITULO-7.
» Texto destacado «

¡Perfecto! Con esto, ya sabes establecer una especificación de constantes (Contenedores de datos que no varían) para los símbolos que necesiten tus programas. Después, será tan fácil como llamar a esas constantes para utilizar su valor.

No sé si te habrás dado cuenta que los valores ASCII varían en 1 en la referencia que te he dado. El espacio en ASCII es el número 32, sin embargo, en COBOL utilizamos 33. Lo mismo con las comillas angulares, estas son en realidad 174 y 175.

¿Qué está ocurriendo?

El código ASCII tiene 256 posibles caracteres. Este habitualmente se cuenta desde el 0 hasta el 255 (256 en total). Sin embargo, en COBOL, se cuenta desde el 1 hasta el 256, por eso esta variación de todo en 1.

Tanto si intentas utilizar el carácter 0 o el 257 o superior, te va a dar error, ya que no existen.

SYMBOLIC CHARACTERS SIMBOLO1 IS 0.
SYMBOLIC CHARACTERS SIMBOLO2 IS 257.

Nos dá el error número simbólico entero inválido.

invalid symbolic integer
COBOL utiliza código ASCII extendido. El normal, solo va desde el carácter 0 al 127 (128 caracteres) y el extendido del 128 al 255 (128 caracteres más), haciendo un total de 256 caracteres.

Especificar más de un símbolo en la misma frase

Para terminar con esto, debo decir que puedes especificar diferentes símbolos en un mismo párrafo para ir utilizándolos después y no tener que tener un montón de líneas repitiendo SYMBOLIC CHARACTERS una y otra vez.

Puedes hacerlo con el verbo IS (es en español) o bien con el verbo ARE (son en español) que me parece más correcto en este caso (plural).

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-7.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
           SPECIAL-NAMES.
           DECIMAL-POINT IS COMMA.
           SYMBOLIC CHARACTERS MEDIO ARE 172
                               CUARTO 173
                               TRES-CUARTOS 244.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
           DISPLAY "Medio: " MEDIO.
           DISPLAY "Un cuarto: " CUARTO.
           DISPLAY "Tres cuartos:" TRES-CUARTOS.
           STOP RUN.
       END PROGRAM CAPITULO-7.

Por cierto, como puedes ver en el código, se pueden utilizar más de un DISPLAY, tantos como quieras. Cada uno, ocupará una línea en la salida de la consola.

Medio: ½
Un cuarto: ¼
Tres cuartos:¾

La colocación de SYMBOLIC CHARACTERS en varias líneas, es opcional, solo lo pongo así para que el código quede más ordenado y fácil de leer. Te recomiendo que sigas la forma de escribir para que todo quede correctamente ordenado.

Estas formas de escribir esto también son correctas, alguna es redundante pero válida:

SYMBOLIC CHARACTERS MEDIO ARE 172
                    CUARTO ARE 173
                    TRES-CUARTOS ARE 244.
SYMBOLIC CHARACTERS MEDIO ARE 172
                    CUARTO IS 173
                    TRES-CUARTOS ARE 244.
SYMBOLIC CHARACTERS MEDIO IS 172
                    CUARTO 173
                    TRES-CUARTOS 244.

Ten en cuenta que después de SYMBOLIC CHARACTERS, se escribe primero el nombre de la constante (MEDIO en el ejemplo) y luego viene el verbo IS o ARE. Si no respetas esto, recibirás un error como este:

Error de sintaxis. IS Inesperado, se esperaba un identificador.

El identificador del que habla, es un nombre de constante como MEDIO.

syntax error, unexpected IS, expecting Identifier

Un orden bonito pero complicado de escribir es este. Puesto que tenemos después de CHARACTERS un identificador (al menos), no nos da error:

SYMBOLIC CHARACTERS LETRA-A LETRA-B LETRA-C LETRA-D
                ARE   66      67      68      69.

Queda bien, si, pero no es práctico de escribir.

Al final del párrafo SYMBOLIC CHARACTERS, no te olvides de poner el punto.

INPUT-OUTPUT SECTION

Continuemos con la segunda sección de la ENVIRONMENT DIVISION. La INPUT-OUTPUT SECTION (sección de entrada-salida).

Como su nombre nos revela, esta sección es para la entrada y salida de datos del programa.

En este párrafo select estoy especificando que se utilice un archivo llamado ARCHIVO-EMPLEADOS (lógico). El cuál, se va a asignar con ASSIGN a un archivo físico en el disco, además del tipo de organización.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. CAPITULO-7.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.

       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT OPTIONAL ARCHIVO-EMPLEADOS
           ASSIGN TO "empleados.dat"
           ORGANIZATION IS SEQUENTIAL.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       PROCEDURE DIVISION.
           STOP RUN.
       END PROGRAM CAPITULO-7.

Aún es pronto para explicar a fondo esto, pero lo que estamos haciendo, es indicarle que archivo queremos que abra el programa y de que forma.

Lo único que quiero que sepas por el momento, es que para utilizar archivos externos, lo haremos en la INPUT-OUTPUT SECTION, con el párrafo FILE-CONTROL.

Por el momento dejemos aquí esta división, la cuál tiene mucho por ofrecerte todavía, pero yo creo que por el momento, es suficiente.


Comentarios

Si te quedan dudas sobre el temario, sobre Cobol, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.