PDA

Ver la Versión Completa : REPLACE con Tabulacion y espacios en blanco


andresf02
20/08/10, 15:24:04
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:

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:


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:


1 # 3 # 1 #10 #06
Donde el # representa al TABULADO

Las cadenas de reemplazo se ven:

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

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:


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!

aldape
23/08/10, 13:52:57
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:


456554.54#NOMBRE DE CLIENTE#PRUEBA