
¿Cómo crear secuencias con PERFORM THRU y THROUGH?
Capítulo 38: Ejecutar múltiples párrafos PERFORM THRU y THROUGH
En esta ocasión vas a aprender una forma nueva de utilizar los PERFORM
. Se trata de PERFORM THRU
.
Metalenguaje COBOL de PERFORM THRU

¿Qué podemos hacer con PERFORM THRU?
Con PERFORM THRU
, podemos ejecutar múltiples párrafos en un rango especificado. Es decir, si tenemos que ejecutar, por ejemplo, tres párrafos seguidos, podemos utilizar tres PERFORM
o bien, crear un rango con PERFORM THRU
que ejecute los tres en el orden en el que se encuentran en el código.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo38.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Nombre PIC X(15) VALUE SPACES.
77 Apellidos PIC X(35) VALUE SPACES.
PROCEDURE DIVISION.
Saludo.
DISPLAY "Hola".
*> Con este PERFORM, llamamos a todos los párrafos que se
*> encuentren entre los párrafos SolicitaNombre y
*> SolicitaApellidos.
PERFORM SolicitaNombre THRU SolicitaApellidos.
DISPLAY "Hola " Nombre " " Apellidos.
STOP RUN.
SolicitaNombre.
DISPLAY "¿Me puedes decir tu nombre?".
ACCEPT Nombre.
SolicitaApellidos.
DISPLAY "¿Me puedes decir tus apellidos?".
ACCEPT Apellidos.
END PROGRAM Capitulo38.
Primero, el programa nos dice saluda. Acto seguido, con PERFORM THRU
, nos lleva al párrafo SolicitaNombre
. Aquí, se le pide el nombre al usuario. Seguimos con el siguiente párrafo, donde se le piden los apellidos. Se vuelve a la siguiente línea del PERFORM THRU
. Se muestra un saludo con los datos del usuario y se finaliza la ejecución del programa.
Hola
¿Me puedes decir tu nombre?
Enrique
¿Me puedes decir tus apellidos?
Apellido Apellido
Hola Enrique Apellido Apellido
Te dejo el código sin utilizar PERFORM
, Con la finalidad de que compares lo que pasaría. Así podrás comparar y tener claras las diferencias.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo38.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Nombre PIC X(15) VALUE SPACES.
77 Apellidos PIC X(35) VALUE SPACES.
PROCEDURE DIVISION.
Saludo.
DISPLAY "Hola".
DISPLAY "Hola " Nombre " " Apellidos.
SolicitaNombre.
DISPLAY "¿Me puedes decir tu nombre?".
ACCEPT Nombre.
SolicitaApellidos.
DISPLAY "¿Me puedes decir tus apellidos?".
ACCEPT Apellidos.
STOP RUN.
END PROGRAM Capitulo38.
Los puntos "·" después del segundo hola, los he puesto para que puedas ver que hay espacios en blanco. Eso es en realidad lo que aparece en la consola. Estos espacios son los que provocan los PICTURE
de las variables (Ya veremos más adelante, como formatear el texto para que quede bien presentado). Puesto que no hay PERFORM
, los párrafo se ejecutan con el flujo normal de COBOL, de arriba a abajo. En este caso, habría que modificar el programa y poner el segundo DISPLAY
después de los párrafos.
También, he cambiado de posición el STOP RUN
, ya que si lo dejaba en Saludo
, ni siquiera le preguntaría al usuario por el nombre y los apellidos.
Hola
Hola····················································
¿Me puedes decir tu nombre?
Enrique
¿Me puedes decir tus apellidos?
Apellido
Ahora, probemos con un PERFORM
a SolicitaNombre
.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo38.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Nombre PIC X(15) VALUE SPACES.
77 Apellidos PIC X(35) VALUE SPACES.
PROCEDURE DIVISION.
Saludo.
DISPLAY "Hola".
PERFORM SolicitaNombre.
DISPLAY "Hola " Nombre " " Apellidos.
STOP RUN.
SolicitaNombre.
DISPLAY "¿Me puedes decir tu nombre?".
ACCEPT Nombre.
SolicitaApellidos.
DISPLAY "¿Me puedes decir tus apellidos?".
ACCEPT Apellidos.
END PROGRAM Capitulo38.
En este caso, me pide el nombre, pero no llega a ejecutarse el párrafo para los apellidos.
Hola
¿Me puedes decir tu nombre?
Enrique
Hola Enrique············································
Pues bien, para que funcionara esto exactamente como el primer ejemplo, pero sin PERFORM THRU
, habría que poner dos PERFORM
seguidos.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo38.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Nombre PIC X(15) VALUE SPACES.
77 Apellidos PIC X(35) VALUE SPACES.
PROCEDURE DIVISION.
Saludo.
DISPLAY "Hola".
PERFORM SolicitaNombre.
PERFORM SolicitaApellidos.
DISPLAY "Hola " Nombre " " Apellidos.
STOP RUN.
SolicitaNombre.
DISPLAY "¿Me puedes decir tu nombre?".
ACCEPT Nombre.
SolicitaApellidos.
DISPLAY "¿Me puedes decir tus apellidos?".
ACCEPT Apellidos.
END PROGRAM Capitulo38.
PERFORM THRU
funciona con los párrafos que quieras. Solo piensa, que con esto, estamos haciendo que varios párrafos funcionen como uno solo. Es una ventaja, pero también una fuente de posibles errores.
Si yo escribo un programa con muchas líneas y muchos párrafos y utilizo PERFORM THRU
corro el riesgo de cometer errores cuando retoque en el futuro el programa o lo hagan otros.
Aquí tienes un claro ejemplo:
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo38.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Nombre PIC X(15) VALUE SPACES.
77 Apellidos PIC X(35) VALUE SPACES.
PROCEDURE DIVISION.
Saludo.
DISPLAY "Hola".
PERFORM SolicitaNombre THROUGH SolicitaApellidos.
DISPLAY "Hola " Nombre " " Apellidos.
STOP RUN.
SolicitaNombre.
DISPLAY "¿Me puedes decir tu nombre?".
ACCEPT Nombre.
ParrafoCualquiera.
DISPLAY "Este es un mensaje de un párrafo cualquiera.".
SolicitaApellidos.
DISPLAY "¿Me puedes decir tus apellidos?".
ACCEPT Apellidos.
END PROGRAM Capitulo38.
Por cierto, he utilizado esta vez THROUGH
en lugar de THRU
. No hay diferencia, son sinónimos.
En este caso, tampoco es que rompa el programa, solo imprime una línea que no tiene nada que ver. Al funcionar todos los PERFORM
simultáneos como un único bloque, los párrafos que haya entre medio, los va a ejecutar también, aunque los pongamos por error.
Esto es muy fácil de ver y de solucionar con pocas líneas. En un programa "real", puede convertirse en un suplicio.
Hola
¿Me puedes decir tu nombre?
Enrique
Este es un mensaje de un párrafo cualquiera.
¿Me puedes decir tus apellidos?
Apellido Apellido
Hola Enrique Apellido Apellido
Mi recomendación, es que documentes muy bien los programas, de esa forma, no tendrás problemas ni con PERFORM THRU
ni con nada.
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.