PDA

Ver la Versión Completa : Problemas en descarga de archivo plano


felix_cid
17/10/08, 14:37:40
Amigos:

Tengo un programa sencillo que me genera un archivo plano en UNIX. Esto lo hago recorriendo una tabla interna con n registros y a través de la sentencia TRANSFER lo voy escribiendo en el archivo de salida.

Hasta aqui todo bien, pero mi problema se presenta porque al final del archivo plano, tengo un campo con 249 caracteres (el registro en total tiene 337), el cual lo debo entregar en blanco, pero al revisar el archivo, no me genera este espacio en blanco, sino que concatena el siguiente registro inmediatamente. Probé agregando al transfer la sentencia LENGTH 337, pero la verdad es que obtuve el mismo resultado, ¿alguien me podría ayudar con ideas para solucionar este problema?.

Muchas gracias.

DavidXD_XD
17/10/08, 14:53:06
Hola ... yo hice algo similar pero con tabuladores, lo hice asi:

DATA: l_espace TYPE x VALUE '20'.

Y comienzo a concatenar el espacio en blanco que quieres con l_espace, es en hexadecimal y el 20 es el codigo de espacio simple, aver pruebalo y me comentas como te fue, un saludo

J_Delcanto
01/06/11, 17:36:39
Me surgio el mismo problema....el punto es que me llena con "CEROS" los espacios en blanco.

Por otro lado, me descargar el fichero plano pero no me considera los espacios en blanco al final del ultimo caracter, al momento de guardar.

De antemano muchas gracias.

daniel1050
01/06/11, 18:02:01
Esto si mal no recuerdo se solucionaba poniendo en el caracter 249, el valor el espacio pero ' ' (ese caracter espacio hacelo con la combinacion de teclas ALT + 255 ).

Yo una vez hice algo parecido.

la estructura del archivo era algo asi:
archivo:
campo1 (3c)
campo2 (3c)
campo3 (3c)
filler (239) - todos blancos
espacioBlanco (1) ---- este va a tener el espacio que obtenes con alt+255.

J_Delcanto
01/06/11, 18:45:51
Daniel,

Tu sabes si existe algun metodo para que cuando guarde el archivo en txt me conserve los espacios en blanco al final del ultimo caracter?

Ejemplo:

AAAAAAA AAAAAAAAA AAAAAAAAAAAA x

Donde x es la ultima posicion en blanco.

daniel1050
01/06/11, 19:03:28
Daniel,

Tu sabes si existe algun metodo para que cuando guarde el archivo en txt me conserve los espacios en blanco al final del ultimo caracter?

Ejemplo:

AAAAAAA AAAAAAAAA AAAAAAAAAAAA x

Donde x es la ultima posicion en blanco.


Mira, te pongo un ejemplo de algo parecido, podes hacer un write.



DATA: NAME(5) VALUE ’Harry’,

DEST(18) VALUE ’Robert James Smith’,

OFF TYPE I,

LEN TYPE I.

OFF = 7.

LEN = 8.

WRITE (NAME) TO DEST+OFF(LEN).

La variable DEST ahora contiene el valor "Robert Harry ith".



Otro ejemplo:

Si tengo una variable v_archivo = '1234567890' y quiero una 'a' en la posicion 12 de esa variable:

WRITE 'a' TO v_archivo+12(1).


Esto me tendria que hacer : v_archivo = '1234567890 a'

Aclaraciones: el 12 es el offset, o sea a partir de que posicion quiero que me escriba y el 1, es que cuantos digitos queremos insertar, en nuestro caso a tiene 1 solo entonces va un "1".

J_Delcanto
01/06/11, 19:10:49
Daniel,

Me explico, tengo un fichero plano de largo 610 y por ejemplo la primera linea ocupa hasta 500 caracteres. Ahora el punto es que cuando lo descargo a txt, cuando lo abro me aparece hasta los 500 caracteres....y no me cuenta los 110 faltantes en blanco.

No se si es problema de codigo o si es otra cosa al momento de descargar.

No es problema de cuando muestro por pantalla, sino que cuando descargo el documento.

daniel1050
01/06/11, 19:14:12
Daniel,

Me explico, tengo un fichero plano de largo 610 y por ejemplo la primera linea ocupa hasta 500 caracteres. Ahora el punto es que cuando lo descargo a txt, cuando lo abro me aparece hasta los 500 caracteres....y no me cuenta los 110 faltantes en blanco.

No se si es problema de codigo o si es otra cosa al momento de descargar.


fijate si le escribis un espacio a la variable donde esta todo el string del archivo, o sea algo asi:

WRITE ' ' TO v_archivo+609(1).

Acordate de donde te puse ' ' hacerlo al espacio ese con la combinacion de teclas ALT+255 o no te lo va a tomar.

Al grabar ese caracter en esa posicion te va a conservar los lugares, yo tuve un problema parecido.

J_Delcanto
01/06/11, 19:18:44
fijate si le escribis un espacio a la variable donde esta todo el string del archivo, o sea algo asi:

WRITE ' ' TO v_archivo+609(1).

Acordate de donde te puse ' ' hacerlo al espacio ese con la combinacion de teclas ALT+255 o no te lo va a tomar.

Al grabar ese caracter en esa posicion te va a conservar los lugares, yo tuve un problema parecido.


eso de ALT+255 debo ponerlo donde dice ' ' ? No comprendo bien

daniel1050
01/06/11, 19:20:09
eso de ALT+255 debo ponerlo donde dice ' ' ? No comprendo bien

si correcto, fijate si apretas eso te genera un espacio.

o sea apreta la tecla ALT y manteniendo apretada los nros 255 del teclado numerico...


Es como cuando apretas alt+160 en el word para que te ponga la a acentuada.

Aunque no parezca, no es lo mismo poner entre medio de las comillas un espacio creado por la barra esparciadora que por esa combinacion de teclas.

J_Delcanto
01/06/11, 19:26:30
Ahhhhhhhhhhh Ok, comprendo...

Dejame probar y te cuento...

Gracias = )

J_Delcanto
01/06/11, 19:38:23
No me resulta porque la tabla es un string....


DATA: BEGIN OF ls_salida
, registro TYPE c LENGTH 610
, END OF ls_salida.

DATA: BEGIN OF ls_salida_f
, registro_f TYPE string
, END OF ls_salida_f.

lo que hago es guardar en ls_salida-registro+N(n) todos los campos...y finalmete le asigno a ls_salida_f-registro_f = ls_salida-registro.

y cuando imprimo es algo asi....



LOOP AT lt_salida_f INTO ls_salida_f.
WRITE:/ ls_salida_f-registro_f.
ENDLOOP.

El problema es que como es un string no me permite hacer lo de ls_salida_f-registro_f+500(110)


=/

daniel1050
01/06/11, 19:46:35
O sea la tabla donde vas guardando los datos es ls_salida segun entiendo.

Cuando vas guardando los campos en ls_salida-registro+N(n) añadi tambien el guardado del espacio que te dije:

WRITE ' ' TO ls_salida-registro+609(1).


cosa que todas las lineas del archivo tengan la terminacion del espacio


la otra que se me ocurre que pruebes es definir asi:

DATA: BEGIN OF ls_salida
registro TYPE c LENGTH 609,
blanco TYPE c DEFAULT ' ', (con el alt+255)
, END OF ls_salida.

con los cambios que fueran necesarios.

J_Delcanto
01/06/11, 19:50:42
O sea la tabla donde vas guardando los datos es ls_salida segun entiendo.

Cuando vas guardando los campos en ls_salida-registro+N(n) añadi tambien el guardado del espacio que te dije:

WRITE ' ' TO ls_salida-registro+609(1).


cosa que todas las lineas del archivo tengan la terminacion del espacio

TE PASASTE!!!!!!!!!!!!!!!!!!

ME FUNCIONA A LA PERFECCION!!!!

MUCHAS GRACIAS!!! ERA LO QUE NECESITABA!!!!

GRACIAS GRACIAS!!!!

daniel1050
02/06/11, 12:00:08
TE PASASTE!!!!!!!!!!!!!!!!!!

ME FUNCIONA A LA PERFECCION!!!!

MUCHAS GRACIAS!!! ERA LO QUE NECESITABA!!!!

GRACIAS GRACIAS!!!!

Buenisimo, me alegro que te haya servido!

erafaela
23/01/13, 21:16:10
Daniel,

Me explico, tengo un fichero plano de largo 610 y por ejemplo la primera linea ocupa hasta 500 caracteres. Ahora el punto es que cuando lo descargo a txt, cuando lo abro me aparece hasta los 500 caracteres....y no me cuenta los 110 faltantes en blanco.

No se si es problema de codigo o si es otra cosa al momento de descargar.

No es problema de cuando muestro por pantalla, sino que cuando descargo el documento.

Yo tuve el mismo problema recientemente, y resulto ser por como bajaba el archivo, lo hacia desde la transacción AL11 debido a que el archivo que yo generaba lo enviaba al servidor, despues me tope con la TXN CG3Y que al abrir el archivo ya me mostraba los espacios en blanco al final de la línea

erafaela
23/01/13, 21:19:25
Amigos:

Tengo un programa sencillo que me genera un archivo plano en UNIX. Esto lo hago recorriendo una tabla interna con n registros y a través de la sentencia TRANSFER lo voy escribiendo en el archivo de salida.

Hasta aqui todo bien, pero mi problema se presenta porque al final del archivo plano, tengo un campo con 249 caracteres (el registro en total tiene 337), el cual lo debo entregar en blanco, pero al revisar el archivo, no me genera este espacio en blanco, sino que concatena el siguiente registro inmediatamente. Probé agregando al transfer la sentencia LENGTH 337, pero la verdad es que obtuve el mismo resultado, ¿alguien me podría ayudar con ideas para solucionar este problema?.

Muchas gracias.


La instrucción TRANSFER funciona tal y como lo necesitas, el caso es de como lo bajas del servidor, yo pase por lo mismo hace un par de días, utilize la transacción CG3Y para bajarlo y los espacios al final de la línea por fín me los mostro.