PDA

Ver la Versión Completa : Sentencia CLASS en SPECIAL-NAMES


Lascu
28 de enero de 2016, 23:23
Hola
En una rutina en la que quiero revisar que el usuario no ingrese caracteres no válidos para el nombre de un correo electrónico, quiero declarar en la sección SPECIAL-NAMES la siguiente sentencia

CLASS wk-caracter-valido IS '@', '_', '.', 'a' THRU 'i', 'j' THRU 'r', 's' THRU 'z', '0' THRU '9'.

Según leí en el manual esta es la forma correcta de hacerlo (NETCOBLanguageReference capítulo 4, página 127).
El problema me surge que al compilarlo no me reconoce la palabra CLASS y me tira el siguiente error " SPECIAL-NAMES(2) : JMN1123I-S An invalid word 'CLASS' was found".
¿ Se puede declarar esto de otra manera ?

Lascu

Kuk
29 de enero de 2016, 09:39
Lascu, creo que te estás equivocando... Además, lo que tú quieres se puede hacer con un nivel 88 y un pequeño bucle:


IDENTIFICATION DIVISION.
PROGRAM-ID. TESTMAIL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-MAIL.
05 WS-MAIL-CHAR PIC X OCCURS 50 TIMES.
88 WS-CHAR-VAL-SI VALUES '@' '_' '.'
'a' THRU 'i', 'j' THRU 'r', 's' THRU 'z', '0' THRU '9'.

01 IDX-1 PIC 99.
01 SW-ERROR PIC X.
88 SW-ERROR-SI VALUE 'S'.
88 SW-ERROR-NO VALUE 'N'.

PROCEDURE DIVISION.

MOVE "[email protected]" TO WS-MAIL *>EJEMPLO
MOVE FUNCTION LOWER-CASE(WS-MAIL) TO WS-MAIL

SET SW-ERROR-NO TO TRUE

MOVE 1 TO IDX-1

PERFORM UNTIL WS-MAIL-CHAR(IDX-1) = SPACES OR IDX-1 > 50
IF NOT WS-CHAR-VAL-SI(IDX-1)
SET SW-ERROR-SI TO TRUE

EXIT PERFORM
END-IF

ADD 1 TO IDX-1
END-PERFORM

IF SW-ERROR-SI
DISPLAY "Error de e-mail: " WS-MAIL-CHAR(IDX-1)

ELSE
DISPLAY "¡E-mail correcto!"
END-IF

GOBACK.