¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Solución al problema de retorno de carro final al descargar archivos en sistema Windows

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 365 Vistas
0
Cargando...

Hola expertos,

Necesito su ayuda con un comportamiento extraño.

En un sistema Windows, se genera un archivo de servidor (txt con separador ';') a partir de una tabla interna abap con el clásico OPEN DATASET...TEXT MODE ENCODING DEFAULT.

Cuando reviso el archivo en AL11, no se ven retornos de carro en la última línea (formato: xxxx;xxx;xxx;x). Cuando uso las flechas del teclado, el final del archivo está en la última línea => Por lo tanto, el archivo parece estar bien.

Pero cuando descargo el archivo localmente y lo abro con notepad++, ¡se establece un retorno de carro final (así que tengo un archivo con una fila vacía...)! Vi que GUI_DOWNLOAD tenía una opción para eliminarlo al descargar, pero ¿el CRLF siempre estuvo ahí o fue añadido por GUI_DOWNLOAD?

Un cliente está recuperando el archivo con su propia herramienta y también hay este retorno de carro final cuando lo descarga (lo que provoca un error).

Intenté recorrer cada registro y hacer el REPLACE ALL OCCURENCE de cl...ABAP_char=>CR_LF con '' pero nada cambia, sigue este retorno de carro final...

¿Alguna idea de por qué?

Que tengan un gran día.

Alexandre

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Es mejor escribir el archivo como desees solo una vez. Por lo tanto, no, no vuelvas a leer el archivo, simplemente créalos correctamente la primera vez.

DATA(string_of_all_lines) = concat_lines_of( sep = |\r\n| table = VALUE string_table(
  ( |primera línea| )
  ( |segunda línea| ) ).
DATA(xstring_of_text_in_utf8) = cl_abap_codepage=>convert_to( string_of_all_lines ).
OPEN DATASET dsetpath IN BINARY MODE...
TRANSFER xstring TO dsetpath.
CLOSE DATASET dsetpath.

El resultado es un archivo de texto en UTF-8, todas las líneas están separadas por CRLF y la última línea del archivo no está seguida por un CRLF.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Gracias Sandra por ayudarme de nuevo (y una y otra vez ^^).

Dijiste: " para convertir la cadena de todas las líneas concatenadas (incluyendo CRLF) ", eso significa que tengo que volver a leer el archivo que acabo de crear para obtener las líneas con CRLF, ¿y luego recrear el archivo usando modo binario y usando una concatenación de todas las líneas en una sola línea?

¿Es esto lo que querías decir? (Perdón, mi inglés puede ser mejorable a veces)

Pero para ser claro: El cliente no utiliza GUI_DOWNLOAD para obtener el archivo. Utiliza otra herramienta que escanea algunos directorios en AL11 para obtener los archivos. Con este método, incluso con su herramienta, ¿tendremos un archivo sin esta última línea vacía?

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Sí, CRLF se agrega al final de cada línea por GUI_DOWNLOAD, cuando se llama con el modo ASC. Creo que el parámetro WRITE_LF_AFTER_LAST_LINE no se utiliza, ¡lo siento!

Cuando utilizas TRANSFER en un servidor Windows, por defecto se escribe un CRLF al final de todas las líneas, incluso la última, por lo que sí tienes una línea vacía al final, y siempre ha sido así.

Si deseas controlar la generación exacta del archivo, entonces la solución temporal es convertir la cadena de todas las líneas concatenadas (incluyendo CRLF) en la codificación predeterminada, supongo que tienes un sistema Unicode, por lo que es UTF-8, y escribir el archivo en modo BIN.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Sí, CRLF se agrega al final de cada línea por GUI_DOWNLOAD, cuando se llama con el modo ASC. Creo que el parámetro WRITE_LF_AFTER_LAST_LINE no se utiliza, ¡lo siento!

Cuando usas TRANSFER en un servidor Windows, por defecto se escribe un CRLF al final de todas las líneas, incluso la última, por lo que sí tienes una línea vacía al final, y siempre ha sido así.

Si deseas controlar la generación exacta del archivo, entonces la solución es convertir la cadena de todas las líneas concatenadas (incluido CRLF) en la codificación predeterminada, supongo que tienes un sistema Unicode, por lo que es UTF-8, y escribir el archivo en modo BIN.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?