
¿Cómo funciona ON SIZE ERROR?
Capítulo 28: Manejo de errores con ON SIZE ERROR
Volvemos con las operaciones aritméticas. Esta vez con un tema nuevo, el manejo de errores con ON SIZE ERROR
.
ON SIZE ERROR
Cuando creamos una operación de cálculo, debemos contemplar los posibles valores devueltos según el tamaño del PICTURE. Hasta ahora, no podías expresar en la consola algún tipo de aviso de que el número es demasiado grande. Este solo aparece cortado.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo28.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Numero1 PIC 999 VALUE 200.
77 Numero2 PIC 999 VALUE 100.
77 Resultado PIC 999 VALUE ZEROS.
PROCEDURE DIVISION.
Calculos.
COMPUTE Resultado = Numero1 * Numero2.
DISPLAY Resultado.
STOP RUN.
END PROGRAM Capitulo28.
Pese a que el resultado debería ser 20000, tan solo le alcanza para almacenar los tres últimos números debido al tamaño del PICTURE
.
000
Podemos avisar al usuario de que el número es demasiado grande con ON SIZE ERROR
(En error de tamaño).
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo28.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Numero1 PIC 999 VALUE 200.
77 Numero2 PIC 999 VALUE 100.
77 Resultado PIC 999 VALUE ZEROS.
PROCEDURE DIVISION.
Calculos.
COMPUTE Resultado = Numero1 * Numero2
ON SIZE ERROR DISPLAY "El número es muy grande, no se "-
"visualiza entero."
END-COMPUTE
DISPLAY Resultado.
STOP RUN.
END PROGRAM Capitulo28.
El número es muy grande, no se visualiza entero.
000
No solo nos podemos limitar a una frase como un DISPLAY
, podemos poner en el bloque de código COMPUTE
todo el código que necesitemos, antes de su cierre con el END-COMPUTE
.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo28.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Numero1 PIC 999 VALUE 200.
77 Numero2 PIC 999 VALUE 100.
77 Resultado PIC 999 VALUE ZEROS.
PROCEDURE DIVISION.
Calculos.
COMPUTE Resultado = Numero1 * Numero2
ON SIZE ERROR
DISPLAY "El número es muy grande, no se "-
"visualiza entero."
DISPLAY "Se ha establecido el valor por defecto (200)"
MOVE 200 TO Resultado
END-COMPUTE
DISPLAY Resultado.
STOP RUN.
END PROGRAM Capitulo28.
El número es muy grande, no se visualiza entero.
Se ha establecido el valor por defecto (200)
200
Si el valor no da error de tamaño, en este caso, se omite todo el código del ON SIZE ERROR
.
COMPUTE Resultado = Numero1 + Numero2
300
Tenemos la posibilidad de utilizar ON SIZE ERROR
con el resto de palabras para operaciones como ADD
o SUBTRACT
. Solo tienes que utilizar el END
correcto en cada caso.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo28.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Numero1 PIC 99 VALUE 99.
77 Numero2 PIC 99 VALUE 80.
77 Resultado PIC 99 VALUE ZEROS.
PROCEDURE DIVISION.
Calculos.
ADD Numero1 TO Numero2 GIVING Resultado
ON SIZE ERROR
DISPLAY "El número es muy grande, no se "-
"visualiza entero."
END-ADD
DISPLAY Resultado.
STOP RUN.
END PROGRAM Capitulo28.
El número es muy grande, no se visualiza entero.
00
Así sería con los otros tres:
SUBTRACT Numero1 FROM Numero2 GIVING Resultado
ON SIZE ERROR
DISPLAY "El número es muy grande, no se "-
"visualiza entero."
END-SUBTRACT
MULTIPLY Numero1 BY Numero2 GIVING Resultado
ON SIZE ERROR
DISPLAY "El número es muy grande, no se "-
"visualiza entero."
END-MULTIPLY
DIVIDE Numero1 BY Numero2 GIVING Resultado
ON SIZE ERROR
DISPLAY "El número es muy grande, no se "-
"visualiza entero."
END-DIVIDE
NOT ON SIZE ERROR
Tenemos la posibilidad de expresar además un bloque con código en caso de que el valor introducido se corresponda con el PICTURE
.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo28.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Numero1 PIC 999 VALUE 200.
77 Numero2 PIC 999 VALUE 100.
77 Resultado PIC 999 VALUE ZEROS.
PROCEDURE DIVISION.
Calculos.
COMPUTE Resultado = Numero1 * Numero2
ON SIZE ERROR
DISPLAY "El número es muy grande, no se "-
"visualiza entero."
DISPLAY "Se ha establecido el valor por defecto (200)"
MOVE 200 TO Resultado
NOT ON SIZE ERROR
DISPLAY "El valor es: " Resultado
END-COMPUTE
STOP RUN.
END PROGRAM Capitulo28.
El número es muy grande, no se visualiza entero.
Se ha establecido el valor por defecto (200)
No obstante, si no hay error de tamaño, se va a ejecutar lo del bloque NOT ON SIZE ERROR
(he cambiado la multiplicación por suma para que no de error de tamaño).
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo28.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Numero1 PIC 999 VALUE 200.
77 Numero2 PIC 999 VALUE 100.
77 Resultado PIC 999 VALUE ZEROS.
PROCEDURE DIVISION.
Calculos.
COMPUTE Resultado = Numero1 + Numero2
ON SIZE ERROR
DISPLAY "El número es muy grande, no se "-
"visualiza entero."
DISPLAY "Se ha establecido el valor por defecto (200)"
MOVE 200 TO Resultado
NOT ON SIZE ERROR
DISPLAY "El valor es: " Resultado
END-COMPUTE
STOP RUN.
END PROGRAM Capitulo28.
El valor es: 300
De esta forma, vamos a evitar tener el DISPLAY
con el resultado o cualquier otro código fuera del COMPUTE
. Así lo tenemos con una mejor organización, lo tenemos todo agrupado en un mismo sitio.
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.