PDA

Ver la Versión Completa : Cadena con caracteres especiales


JuanFCalle
23/09/08, 16:59:34
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
23/09/08, 19:23:10
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.

CarlosPB83266
23/02/11, 17:15:02
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

orellanajorge
18/12/15, 10:21:53
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:
http://sapymas.blogspot.com.ar/2011/06/convertir-caracteres-extranos-en-abap.html

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.

degar7
30/11/17, 13:23:25
Muchas gracias me sirvio la funcion.

grandnomade
12/11/19, 15:36:30
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:
http://sapymas.blogspot.com.ar/2011/06/convertir-caracteres-extranos-en-abap.html

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