IDENTIFICATION DIVISION.
******************
* Identification *
******************
PROGRAM-ID. COBOLINPUT.
Validar el tipo de dato contenido en una variable en COBOL.
A continuación se describe las circunstancias bajo las cuales la siguiente solución tiene sentido:
Existen cinco tipos de condiciones simples que pueden ser usadas para tomar decisiones, una de ellas es la denominada condición de clase, con la cual podemos validar que el contenido de las variables pertenezcan al tipo de dato deseado y que la aplicación manejará.
"La condición de clase determina cuando el contenido de un ítem es alfabético, alfabético con minúsculas, alfabético con mayúsculas, numérico o si contiene solo caracteres en el conjunto especificado en la cláusula "CLASS" como se define en el parágrafo SPECIAL-NAMES de la sección Environment"[3].
Se da inicio a la aplicación definiendo la división IDENTIFICATION DIVISION[4]:
IDENTIFICATION DIVISION.
******************
* Identification *
******************
PROGRAM-ID. COBOLINPUT.
Definimos la división ENVIRONMENT DIVISION[5]:
***************
* Environment *
***************
ENVIRONMENT DIVISION.
En SPECIAL-NAMES declaramos una nueva clase llamada WS-VALID-CHARSET, la cual se compone de las letras: A, B, C, D, x, y, z, S, T, 9 y espacio.
SPECIAL-NAMES.
CLASS WS-VALID-CHARSET IS
'A' THRU 'D'
'x' THRU 'z'
'S' 'T' '9' ' '.
Dentro de la division DATA DIVISION[6] definimos la variable W01-INPUT para obtener la entrada del usuario:
********
* Data *
********
DATA DIVISION.
WORKING-STORAGE SECTION.
01 W01-INPUT PIC X(10).
Dentro de la division PROCEDURE DIVISION[7] obtenemos la entrada del usuario y la almacenamos en la variable W01-INPUT:
********
* Main *
********
PROCEDURE DIVISION.
MAIN.
ACCEPT W01-INPUT.
A continuación validamos cada tipo de dato, comenzando con el numérico (0-9):
IF W01-INPUT IS NUMERIC
DISPLAY "Numeric"
ELSE
DISPLAY "Not numeric"
END-IF.
Alfabético (a-z, A-Z):
IF W01-INPUT IS ALPHABETIC
DISPLAY "Alphabetic"
ELSE
DISPLAY "Not alphabetic"
END-IF.
Alfabético con minúsculas (a-z):
IF W01-INPUT IS ALPHABETIC-LOWER
DISPLAY "Alphabetic lower"
ELSE
DISPLAY "Not alphabetic lower"
END-IF.
Alfabético con mayúsculas (A-Z):
IF W01-INPUT IS ALPHABETIC-UPPER
DISPLAY "Alphabetic upper"
ELSE
DISPLAY "Not alphabetic upper"
END-IF.
Clase definida por el usuario (A-D, x-z, S, T, 9, ' '):
IF W01-INPUT IS WS-VALID-CHARSET
DISPLAY "Charset valid"
ELSE
DISPLAY "Charset not valid"
END-IF.
STOP RUN.
En la siguiente tabla podrá encontrar algunos casos de prueba:
Entrada | Numérico | Alfabético | Alfabético minus | Alfabético mayus | Clase personalizada |
---|---|---|---|---|---|
0000001234 |
X |
||||
admin |
X |
X |
|||
Fluid Attacks |
X |
X |
|||
ABCD |
X |
X |
X |
||
AxST BD9 |
X |
Puedes descargar el código fuente pulsando en el siguiente enlace:
contiene la implementación del código depurado anteriormente.
Copyright © 2021 Fluid Attacks, We hack your software. All rights reserved.