REPLACE con Tabulacion y espacios en blanco

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • andresf02
    Senior Member
    • nov
    • 190

    #1

    REPLACE con Tabulacion y espacios en blanco

    Buenos dias.


    Tengo una tabla interna (no creada por mi aclaro) con n columnas de datos distintos (Nombres, codigos, valores, etc). La tabla esta diseñada para que entre cada valor, va una columna con algun caracter especial.

    Ejemplo: t_dfile

    Codigo|Espacio1-|-Nombre-|Espacio2--|valor--|ESPACIO3|
    00001|TABULADO|IPSA S.A.|TABULADO|100.52|TABULADO|
    00002|TABULADO|COLP S.A.|TABULADO|800.00|TABULADO|

    Cada uno de estos registro los estoy copiando a una cadena de tamaño 100 caracteres ti_plano.

    Es decir, en la cadena quedan todos los datos de un registro concatenados

    ti_plano = t_dfile.


    hago un CONDENSE a ti_plano para eliminar los espacios en blanco que quedan cuando el valor no usa toda la capacidad del campo. Por ejmplo el nombre del cliente es un CHAR40 y la cadena IPSA S.A. solo ocupa 9 caracterres de los 40.

    El problema es que al generar un archivo plano (modo de ejecucion online), para algunos datos (sobre todo los que son de 1 solo digito, aunque la capacidad del campo origial era de mas caracteres), queda el registro de la siguiente forma:


    [Valor][Espacio en blanco][Tabulado][Valor][Espacio en blanco][Tabulado]...

    Pero para otros datos como el nombre del cliente si queda como lo necesito:

    [Valor][Tabulado][Valor]...


    Si hago un CONDENSE con NO-GAPS, queda perfecto, pero como tengo el nombre de los clientes, el NO-GAPS no me sirve.



    Intenté lo siguiente:

    Código:
    DATA: v_horiz_tab(1) TYPE c,
          cadena(2) type c,
          cadena2(2) type c,
          cadena3(3) type c.
    
    v_horiz_tab = cl_abap_char_utilities=>horizontal_tab.
    CONCATENATE ' ' v_horiz_tab into cadena RESPECTING BLANKS.
    CONCATENATE v_horiz_tab ' ' into cadena2 RESPECTING BLANKS.
    CONCATENATE ' ' v_horiz_tab ' ' into cadena3 RESPECTING BLANKS.
    Es decir, estoy concatenando espacios en blanco antes y despues del tabulado con el fin de hacer los siguiente:


    Código:
    condense ti_plano.
      REPLACE ALL OCCURRENCES OF cadena3 IN ti_plano WITH v_horiz_tab .
      REPLACE ALL OCCURRENCES OF cadena2 IN ti_plano WITH v_horiz_tab .
      REPLACE ALL OCCURRENCES OF cadena IN ti_plano WITH v_horiz_tab .
    En el debugging la cadena ti_plano antes de los replaces (pero despues del condence) se ve asi:


    Código:
    1 # 3 # 1 #10 #06
    Donde el # representa al TABULADO

    Las cadenas de reemplazo se ven:
    Código:
    Variable              Valor                      Valor Hexa
    V_HORIZ_TAB	#	                     0900
    CADENA	        [Blanco]#	             20000900
    CADENA2	        #[Blanco] 	             09002000
    CADENA3	        [Blanco]#[Blanco]     200009002000
    TI_PLANO           # 3 # 1 #10 #06      31002000090020003300
    Si ven el valor en Hexa, el espacio en blanco es representado por un 2000

    El problema es que al parecer el

    Código:
    REPLACE ALL OCCURRENCES OF cadena IN ti_plano WITH v_horiz_tab .
    no funciona, el programa no reemplaza un [Espacio][Tabulado] por [Tabulado] (200009000 por 0900 en hexa)

    y el resultado final en el archivo plano es:

    Código:
    11[Blanco][Tabulado]3[Blanco][Tabulado]IPSA S.A.[TABULADO]
    22[Blanco][Tabulado]1[Blanco][Tabulado]IPSA S.A.[TABULADO]
    13[Blanco][Tabulado]3[Blanco][Tabulado]COL S.A.[TABULADO]
    24[Blanco][Tabulado]2[Blanco][Tabulado]COL S.A.[TABULADO]

    Noten que para el caso del nombre del cliente, no aparece ese espacio al final antes del tabulado, Asi necesito que quede para todos los datos. Lo mismo que un Condense NO-GAPS pero sin afectar el nombre del cliente.


    Gracias!
    Editado por última vez por andresf02; 20/08/2010, 15:28:13.
  • aldape
    Senior Member
    • dic
    • 204

    #2
    quiza este ejemplo te puede servir...


    data t1(10) type c.
    data t2(20) type c.
    data t3(10) type c.

    data r(50) type c.

    t1 = '456554.54'.
    t2 = 'NOMBRE DE CLIENTE'.
    t3 = 'PRUEBA'.
    concatenate t1 '#' t2 '#' t3 into r.
    write r.

    Genera este resultado:

    Código:
    456554.54#NOMBRE DE CLIENTE#PRUEBA

    Comentario

    Trabajando...