Duda con comparaciones de cadenas de caracteres

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • nachosds
    Member
    • dic
    • 48

    #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.
    http://www.mnsystem.com/
  • Rodolfo SAP
    Member
    • jun
    • 89

    #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.

    Comentario

    • ballan
      Senior Member
      • oct
      • 671

      #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.

      Comentario

      • nachosds
        Member
        • dic
        • 48

        #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.
        http://www.mnsystem.com/

        Comentario

        • mauro_ARG
          Member
          • abr
          • 87

          #5
          Código:
          REPORT y_test.
          
          PARAMETERS p_param(5) TYPE c OBLIGATORY.
          
          DATA: char_permitidos(39) TYPE c
                              VALUE 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789*/'.
          
          
          START-OF-SELECTION.
            IF ( p_param CO char_permitidos ).
              MESSAGE i368(00) WITH 'Correcto!'.
            ELSE.
              MESSAGE i368(00) WITH 'Incorrecto!'.
            ENDIF.

          Comentario

          Trabajando...