#1
|
|||
|
|||
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. |
#2
|
|||
|
|||
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. |
#3
|
|||
|
|||
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. |
#4
|
|||
|
|||
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. |
#5
|
|||
|
|||
Herramientas | Buscar en Tema |
Desplegado | |
|
|