miércoles, 1 de junio de 2011

Convertir caracteres extraños en ABAP

La entrada de hoy no tiene nada que ver con CRM. Se trata de reemplazar caracteres extraños. En ocasiones al importar o exportar archivos o incluso en la comunicación entre módulos o sistemas (para quien no hay lo sepa el módulo de CO-PA es un poco "especial") se transportan caracteres que no son representables.
Realmente es muy frustrante ver como un caracter extraño puede deshacer todo un desarrollo. Estos caracteres no se puede atacar mediante un REPLACE ya que no pueden ser entrados por teclado y el cambio a hexadecimal no suele dar muy buenos resultados.
En el ejemplo que os pongo cambiremos esos caracteres por el caracter '/' con lo que ya lo podeis tratar como un texto normal. Yo lo que haré despues es sutiruirlo por espacio y condensar:

 Definimos un integer con el valor hexadecimal de la barra:

DATA lv_int TYPE i VALUE 47.

Llamo a la función:

CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
  EXPORTING
    intext      = "Texto_a_tratar"
    replacement = lv_int
   IMPORTING
    outtext     ="texto_salida"
      .

REPLACE ALL OCCURRENCES OF '/' IN "texto_salida" WITH space.
CONDENSE "texto_salida" NO-GAPS.

6 comentarios:

  1. Jajajjaa, yo he trabajado con CO-PA y con lo del modulo "especial" me senti re identificado. =)

    Muy buen post, sigue así amigo Bisonye.

    ResponderEliminar
  2. Y si tu texto original tiene espacios? los elimina tambien?

    ResponderEliminar
    Respuestas
    1. Adranko, el condense elimina los espacios delante y detrás de la cadena de texto y los intermedios los deja en un solo espacio.
      Si además añades el NO-GAPS elimina todos los espacios, tanto delante, atrás como los intermedios.

      Saludos

      Eliminar
  3. Muchas Gracias, llevaba 2 dias buscando la forma de solucionar mi problema

    ResponderEliminar
  4. Ciertamente un gran aporte. Ha sido mi salvación después de un buen rato frustrada, dado que aun con el REPLACE y usándo los carácteres especiales, se me escapaba siempre alguno que me fastidiaba el Excel. Gracias!

    ResponderEliminar
  5. holas.
    Tengo el ingreso de un lote errado, gabro con letra minuscula y no se puede realizar el cambio o corrección usando las transacción MB1B clase de mov. 311.

    Como lo puedo corregir? 703pe00169

    ResponderEliminar