Cadena con caracteres especiales

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • JuanFCalle
    Junior Member
    • sep
    • 17

    #1

    Cadena con caracteres especiales

    Hola, tengo un problema, tengo una cadena en un campo de una tabla Z esta con caracteres ## cuando hay un enter, pero se los tengo que quitar y no he podido, he tratado con translate y replace pero pienso que lo que toca es ver la cadena en hexadecimal para poder saber realmente que son esos caracteres, para poder quitarselos.

    Agradezco me ayuden.

    Gracias
  • ibecerra

    #2
    Checka esta funcion espero q te sirva
    FUNCTION Z_CHARACTER_TO_ASCII_CODE.
    *"----------------------------------------------------------------------
    *"*"Interfase local
    *" IMPORTING
    *" REFERENCE(FI_CHARACTER) TYPE C
    *" EXPORTING
    *" REFERENCE(FE_ASCII_CODE_DEC) TYPE I
    *" REFERENCE(FE_ASCII_CODE_HEX) TYPE C
    *"----------------------------------------------------------------------
    field-symbols <FS> type x.
    *Have to use CASTING here to purposely force SAP to convert the
    *character to an equivalent HEX value (using ASCII chart).
    *Note that CASTING feature is not available prior release 4.6
    assign fi_character(1) to <FS> casting.
    *The type of the destination field will cause SAP to determine which
    *type (Decimal/Hexadecimal) of ASCII code should be converted:
    * X -> I gives Dec value
    * X -> C gives Hex value
    fe_ascii_code_dec = <FS>.
    fe_ascii_code_hex = <FS>.


    ENDFUNCTION.

    Comentario

    • CarlosPB83266
      Junior Member
      • ene
      • 5

      #3
      Checa esta

      Yo tengo el mismo proble, estoy usando el siguiente codigo que si me quita los enter pero tambien puntos y comas, hay que adecuarla.

      L_ARROBA TYPE C VALUE '@',
      L_SPACE TYPE C VALUE '',
      L_VAR2 TYPE C LENGTH 2 VALUE '@@',


      READ TABLE I_TLINE INDEX 1.
      DATA L_CAD TYPE C LENGTH 15.
      L_CAD = '[^[:alnum:] ]'.
      REPLACE ALL OCCURRENCES OF REGEX L_CAD IN I_TLINE-TDLINE WITH L_ARROBA.

      IF SY-SUBRC EQ 0.
      SPLIT I_TLINE-TDLINE AT L_VAR2
      INTO: L_LINE01 L_LINE02 L_LINE03 L_LINE04
      L_LINE05 L_LINE06 L_LINE07 L_LINE08
      L_LINE09 L_LINE10.

      REPLACE ALL OCCURRENCES OF REGEX L_ARROBA IN L_LINE10 WITH L_SPACE.
      CLEAR: L_CONT, L_REG.




      Saludos

      Comentario

      • orellanajorge
        Junior Member
        • dic
        • 4

        #4
        Funcion SCP_REPLACE_STRANGE_CHARS

        He tenido el mismo problema. Es un poco tarde ahora, pero quería dejar esta solución en algún lado jeje.

        Yo tuve que modificar un xml en ABAP para una transformación, pero como estabe en BIN, me traia siempre el # y entonces, al guardar la transformación no me lo tomaba.

        Las sentencias REPLACE, SEARCH y demas tratamientos para las cadenas de caracteres no pueden utilizarse para estos caracteres especiales.

        El problema era ese caracter #, asi que probando incansablemente, di con esta función:

        DATA: vl_ligne TYPE string,

        CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
        EXPORTING
        intext = vl_ligne (Variable con el caracter #)
        replacement = 32 "Code ASCII: space -> (Valor con el que queres reemplazar el caracter especial, indicado en ASCII)
        IMPORTING
        outtext = vl_ligne Variable de Salida
        EXCEPTIONS
        invalid_codepage = 1
        codepage_mismatch = 2
        internal_error = 3
        cannot_convert = 4
        fields_not_type_c = 5
        OTHERS = 6.

        IF sy-subrc IS NOT INITIAL.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.

        Aqui quito los espacios para dejar a mi variable limpia
        *Clear spaces
        CONDENSE vl_ligne.

        Así de simple he podido tratar mi linea de archivo y guardar el XML en ABAP sin problema.

        La fuente donde tome es:


        Saludos.

        Jorge.

        PD: Cuando vas a probar la función en la SE37, probablemente no veas que haga lo que dice. Tenes que codificarla y probarla con Debug en el programa o funcion que esteis programando.
        Editado por última vez por orellanajorge; 18/12/2015, 10:30:13.

        Comentario

        • degar7
          Junior Member
          • nov
          • 4

          #5
          Gracias...

          Muchas gracias me sirvio la funcion.

          Comentario

          • grandnomade
            Junior Member
            • ene
            • 18

            #6
            Originalmente publicado por orellanajorge
            He tenido el mismo problema. Es un poco tarde ahora, pero quería dejar esta solución en algún lado jeje.

            Yo tuve que modificar un xml en ABAP para una transformación, pero como estabe en BIN, me traia siempre el # y entonces, al guardar la transformación no me lo tomaba.

            Las sentencias REPLACE, SEARCH y demas tratamientos para las cadenas de caracteres no pueden utilizarse para estos caracteres especiales.

            El problema era ese caracter #, asi que probando incansablemente, di con esta función:

            DATA: vl_ligne TYPE string,

            CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
            EXPORTING
            intext = vl_ligne (Variable con el caracter #)
            replacement = 32 "Code ASCII: space -> (Valor con el que queres reemplazar el caracter especial, indicado en ASCII)
            IMPORTING
            outtext = vl_ligne Variable de Salida
            EXCEPTIONS
            invalid_codepage = 1
            codepage_mismatch = 2
            internal_error = 3
            cannot_convert = 4
            fields_not_type_c = 5
            OTHERS = 6.

            IF sy-subrc IS NOT INITIAL.
            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
            ENDIF.

            Aqui quito los espacios para dejar a mi variable limpia
            *Clear spaces
            CONDENSE vl_ligne.

            Así de simple he podido tratar mi linea de archivo y guardar el XML en ABAP sin problema.

            La fuente donde tome es:


            Saludos.

            Jorge.

            PD: Cuando vas a probar la función en la SE37, probablemente no veas que haga lo que dice. Tenes que codificarla y probarla con Debug en el programa o funcion que esteis programando.
            Muchas gracias, sirvió.

            Comentario

            Trabajando...