Curso de Cobol y PowerCobol

¿Cómo funcionan los niveles de las variables de COBOL?

Capítulo 22: Niveles de ejecución de las variables

Es hora de tomar un descanso de los condicionales. Digo descanso, porque no los vamos a dejar de utilizar en todo el curso.

Esta vez tenemos que cambiar de tema, ya que es necesario para seguir el curso que conozcas los números de nivel de ejecución de las variables.

Hasta ahora he utilizado siempre el nivel de ejecución 01 para no crear confusiones utilizando otros tipos antes de explicarlo.

Me he tenido que limitar sin utilizarlos, pero ya es necesario que los aprendas para ir implementando mayor complejidad a los ejemplos. No es nada complicado en realidad, así que no te preocupes.

Los números de nivel de ejecución de COBOL

Tenemos disponibles los números de nivel en diferentes categorías, la primera, los de propósito general van del 01 al 49 y luego tenemos los números de nivel de propósito especial 66, 77 y 88.

Los números de nivel de propósito general

Empecemos por los números de propósito general. Estos números sirven para declarar las variables utilizadas durante la ejecución del programa.

En estos números de nivel (del 01 al 49) disponemos de tres tipos de variables:

  • Variable de datos individual.
  • Variable de datos de grupo.
  • Variable de datos elementales.

Las variables individuales

Las variables declaradas hasta ahora son las individuales, no están sujetas a ningún tipo de dato más.

No obstante, aunque pertenezca al grupo de los niveles del 01 al 49, no se puede poner más que el 01 si la variable es individual.

Por ejemplo, le pongo a esta variable un nivel 04. Da error si lo intentas compilar.

04 Numero1 PIC S99 VALUE -25.

El número de nivel debe empezar por 01 o 77 (Ahora explicaré lo de 77).

level number must begin with 01 or 77

Las variables de grupo y elementales

Pasemos a las variables de grupo y las elementales. Entenderás mejor esto.

Las variables de grupo se declaran con el nivel 01 también.

Una vez tenemos el grupo creado es el momento de añadir las variables elementales, que son como las individuales, solo que van dentro de un grupo de variables.

La diferencia de las variables de grupo frente a las individuales es que estas no llevan PICTURE, son como un contenedor que contendrá otras variables individuales, creando un grupo. Aquí tienes un ejemplo:

01 Usuario.

A continuación, vamos a crear tantas variables elementales como queramos, por ejemplo...

01 Usuario.
	02 Nombre PIC X(15) VALUE SPACES.
	02 Apellidos PIC X(30) VALUE SPACES.
	02 Telefono PIC X(9) VALUE SPACES.

¿Por qué estas variables elementales llevan el nivel 02?

Puedes poner el nivel que quieras hasta el 49. Eso sí, debes respetar el nivel superior, el 01. No puedes hacer esto:

01 Usuario.
	01 Nombre PIC X(15) VALUE SPACES.
	01 Apellidos PIC X(30) VALUE SPACES.
	01 Telefono PIC X(9) VALUE SPACES.

Tampoco puedes hacer esto:

01 Usuario.
	25 Nombre PIC X(15) VALUE SPACES.
	26 Apellidos PIC X(30) VALUE SPACES.
	30 Telefono PIC X(9) VALUE SPACES.

Todas tienen que llevar el mismo número de nivel.

Entonces, para que lo entiendas mejor, tenemos por un lado el nombre del contenedor, la variable compuesta, grupo de datos, variable de grupo o llámala como quieras.

Este contenedor se encuentra en el punto más alto de la jerarquía, digamos que es la raíz del resto de elementos, a ese nivel superior se le da el 01, siempre.

Luego dentro de él, puedes poner cualquiera de los números de nivel siguientes a 01 pero inferiores a 50, 49 máximo.

Entonces, puedes dejarlo así perfectamente:

01 Usuario.
	05 Nombre PIC X(15) VALUE SPACES.
	05 Apellidos PIC X(30) VALUE SPACES.
	05 Telefono PIC X(9) VALUE SPACES.

De hecho, es más común ver código con la primera agrupación en nivel 05 que 02.

Puedes hacer más niveles inferiores en esta jerarquía.

Hagamos un subnivel para el teléfono:

⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo22.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       01 Usuario.
           05 Nombre PIC X(15) VALUE SPACES.
           05 Apellidos PIC X(30) VALUE SPACES.
           05 Telefonos.
               10 Telefono1 PIC X(9) VALUE SPACES.
               10 Telefono2 PIC X(9) VALUE SPACES.

       PROCEDURE DIVISION.

       STOP RUN.

       END PROGRAM Capitulo22.

¿Has visto? He creado un grupo dentro de otro grupo. Así puedes ir organizando la información. Fíjate que para indicar que Telefonos es un grupo, le he quitado el PICTURE como a Usuario.

Te recomiendo que no pierdas números de nivel por el camino, ya que al estar limitados hasta el 49, si queremos hacer muchas subcategorías de datos, no nos van a bastar. Podrías dejar esto así:

⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo22.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       01 Usuario.
           02 Nombre PIC X(15) VALUE SPACES.
           02 Apellidos PIC X(30) VALUE SPACES.
           02 Telefonos.
               03 Telefono1 PIC X(9) VALUE SPACES.
               03 Telefono2 PIC X(9) VALUE SPACES.

       PROCEDURE DIVISION.

       STOP RUN.

       END PROGRAM Capitulo22.

Si ya en la primera subcategoría he dado el numero de nivel 02, la siguiente subcategoría será de nivel 03 o superior. Nunca puede ser inferior. Esto da error:

01 Usuario.
	05 Nombre PIC X(15) VALUE SPACES.
	05 Apellidos PIC X(30) VALUE SPACES.
	05 Telefonos.
		02 Telefono1 PIC X(9) VALUE SPACES.
		02 Telefono2 PIC X(9) VALUE SPACES.

Que ahora quieres una categoría de apellidos, hazlo así:

⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo22.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       01 Usuario.
           02 Nombre PIC X(15) VALUE SPACES.
           02 Apellidos.
               03 Apellido1 PIC X(30) VALUE SPACES.
               03 Apellido2 PIC X(30) VALUE SPACES.
           02 Telefonos.
               03 Telefono1 PIC X(9) VALUE SPACES.
               03 Telefono2 PIC X(9) VALUE SPACES.

       PROCEDURE DIVISION.

       STOP RUN.

       END PROGRAM Capitulo22.

Puedes repetir los números de nivel respetando la jerarquía.

Si quiero hacer más subcategorías en Telefonos, lo puedo hacer así:

⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo22.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       01 Usuario.
           02 Nombre PIC X(15) VALUE SPACES.
           02 Apellidos.
               03 Apellido1 PIC X(30) VALUE SPACES.
               03 Apellido2 PIC X(30) VALUE SPACES.
           02 Telefonos.
               03 Smartphone.
                   04 Smartphone1 PIC X(9) VALUE SPACES.
                   04 Smartphone2 PIC X(9) VALUE SPACES.
               03 Fijo.
                   04 Fijo1 PIC X(9) VALUE SPACES.
                   04 Fijo2 PIC X(9) VALUE SPACES.

       PROCEDURE DIVISION.

       STOP RUN.

       END PROGRAM Capitulo22.

Y de esta forma vamos haciendo jerarquías que pueden llegar a ser muy complejas, siempre con la limitación hasta el nivel 49.

Si pongo aquí el nivel 49 va a funcionar:

03 Fijo.
	49 Fijo1 PIC X(9) VALUE SPACES.
	49 Fijo2 PIC X(9) VALUE SPACES.

En cambio, si intento poner el 50 o superior, me da error.

03 Fijo.
	50 Fijo1 PIC X(9) VALUE SPACES.
	50 Fijo2 PIC X(9) VALUE SPACES.

Número de nivel '50' inválido.

invalid level number '50'

No te preocupes si no has entendido totalmente esto, iremos practicando mucho más con todo.

Los números de nivel de propósito especial

El número de nivel 66 se utiliza para la cláusula RENAMES, la cual veremos en otro capítulo para no alargar demasiado este.

El número de nivel 77

El número de nivel 77 está expresamente creado para variables individuales, como las de 01 que estamos escribiendo hasta ahora.

Entonces, ¿Por qué utilizar el nivel 77 en lugar del 01?

Estas variables funcionan igual:

01 Variable1 PIC XXXX VALUE SPACES.
77 Variable2 PIC XXXX VALUE SPACES.

No obstante, el nivel 01 se puede subdividir, el 77 no.

La ventaja está en el uso de recursos, el nivel 01 al tener la posibilidad de crear estructuras como la del ejemplo, ocupa en memoria unos bytes extra, cosa que nos ahorramos utilizando el nivel 77 para variables individuales.

Por lo tanto, a partir de ahora utiliza el nivel 77 para variables simples y el 01 si vas a crear una variable compuesta como la de los ejemplos de esta capítulo. Así tu programa será más óptimo y distinguirás los tipos de variables más fácilmente.

Nos queda un último nivel, el 88. El cual dejo para ver en el próximo capítulo, ya sabes para que, para que no quede un capítulo tan largo. :)


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.