MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Duda con comparaciones de cadenas de caracteres (foro/showthread.php?t=65847)

nachosds 15/01/13 13:06:15

Duda con comparaciones de cadenas de caracteres
 
Buenas tardes a tod@s,

Estoy realizando un Report en el cual tengo que comprobar que un campo obtenido como parametro de entrada, solo pueda tener letras, números o los simbolos '*' o '/'.

Por ejemplo, si meto por pantalla 'aaa1*', sería correcto, pero si por ejemplo introducimos 'aa-1', no sería correcto, ya que el simbolo '-' no estaría permitido.

He probado con las sentencias de comparaciones CO, etc pero no me funciona correctamente.

A ver si alguien sabria como hacerlo.

Muchas gracias.

Rodolfo SAP 15/01/13 18:08:18

Posiblemente pues hacer lo siguiente
 
Hola

Estimado, una solución podría ser la siguiente.

Cra una tabla interna con un campo donde podrias guardar todos los caracteres validos.

ti_validos-caracter = 'A'.
ti_validos-caracter = 'a'.
ti_validos-caracter = '1'.
etc...
etc...

Lee el tamaño de tu parametro input.

len = strlen( parametro ).

Despues ve recorriendo tu cadena, caracter por caracter en base al tamaño y validando contra la tabla, si algun valor no esta en la tabla marcar el error.

pos = 1.
Do len times.
CLEAR ti_validos.
READ TABLE ti_validos WITH KEY caracter = parametro+pos(1).
IF sy-subrc NE 0.
** Error de caracter
ENDIF.
ADD 1 to pos.
ENDDO.

Y con eso creo podrias resolver tu escenario.

Espero te sirv. Saludos.

ballan 16/01/13 09:56:42

Otra manera de hacerlo

data: lv_car_permitidos type char100.

concatenate sy-abcde '*' '/' '0' '1' '2' '3' ... '9' into lv_car_permitidos.

if parametro CO lv_car_permitidos.
La cadena parametro es correcta
else.
la cadena parametro es incorrecta
endif.

nachosds 17/01/13 09:01:14

Muchas gracias por las propuestas.

En el caso de la comparación 'CO', no me funciona... La verdad es que no he llegado a entender porqué.

Al final como lo he solucionado es de la siguiente manera:

DATA: l_string(39) TYPE c VALUE 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789*/', "caracteres correctos
l_indice TYPE sy-index.

DO 5 TIMES. "le pongo un 5 porque el campo tiene esa longitud
l_indice = sy-index - 1.
SEARCH l_string FOR gs_zja_tr_t_0009-zzpappre+l_indice(1).
IF sy-subrc <> 0.
IF gs_zja_tr_t_0009-zzpappre+l_indice(1) <> '*'
AND gs_zja_tr_t_0009-zzpappre+l_indice(1) <> ' '.
MESSAGE e068(zja_tr_ms_01). "Caractétes de Patrones incorrecto.
ENDIF.
ENDIF.
ENDDO.

mauro_ARG 19/01/13 12:45:22



Husos Horarios son GMT. La hora en este momento es 10:52:42.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web