¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Solução para o problema de retorno de carro final ao baixar arquivos no sistema Windows

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

Olá especialistas,

Preciso da sua ajuda com um comportamento estranho.

Em um sistema Windows, um arquivo de servidor (txt com separador ';') é gerado a partir de uma tabela interna abap com o clássico OPEN DATASET...TEXT MODE ENCODING DEFAULT.

Quando eu reviso o arquivo no AL11, não vejo retornos de carro na última linha (formato: xxxx;xxx;xxx;x). Quando eu uso as setas do teclado, o final do arquivo está na última linha => Portanto, o arquivo parece estar correto.

Mas quando eu baixo o arquivo localmente e o abro com o notepad++, um retorno de carro final é adicionado (então tenho um arquivo com uma linha vazia...)! Eu vi que o GUI_DOWNLOAD tinha uma opção para removê-lo ao baixar, mas o CRLF sempre esteve lá ou foi adicionado pelo GUI_DOWNLOAD?

Um cliente está recuperando o arquivo com sua própria ferramenta e também há esse retorno de carro final quando ele o baixa (o que causa um erro).

Eu tentei percorrer cada registro e fazer o REPLACE ALL OCCURENCE de cl...ABAP_char=>CR_LF com '' mas nada muda, o retorno de carro final continua...

Alguma ideia do porquê?

Tenha um ótimo dia.

Alexandre

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

4 Respuestas

0
Cargando...

É melhor escrever o arquivo como desejar apenas uma vez. Portanto, não, não leia o arquivo novamente, apenas crie-os corretamente da primeira vez.

DATA(string_of_all_lines) = concat_lines_of( sep = |\r\n| table = VALUE string_table(
  ( |primeira linha| )
  ( |segunda linha| ) ).
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.

O resultado é um arquivo de texto em UTF-8, todas as linhas estão separadas por CRLF e a última linha do arquivo não é seguida por um CRLF.

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

Obrigado Sandra por me ajudar novamente (e de novo e de novo ^^).

Você disse: " para converter a cadeia de todas as linhas concatenadas (incluindo CRLF) ", isso significa que tenho que ler novamente o arquivo que acabei de criar para obter as linhas com CRLF, e então recriar o arquivo usando o modo binário e concatenando todas as linhas em uma única linha?

É isso que você quis dizer? (Desculpe, meu inglês pode ser aprimorado às vezes)

Mas para ser claro: O cliente não usa o GUI_DOWNLOAD para obter o arquivo. Ele usa outra ferramenta que escaneia alguns diretórios em AL11 para obter os arquivos. Com esse método, mesmo com sua ferramenta, teremos um arquivo sem esta última linha vazia?

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

SIM, CRLF é adicionado ao final de cada linha pelo GUI_DOWNLOAD quando chamado com o modo ASC. Acredito que o parâmetro WRITE_LF_AFTER_LAST_LINE não é utilizado, desculpe!

Ao usar TRANSFER em um servidor Windows, por padrão é escrito um CRLF ao final de todas as linhas, inclusive a última, então se você tem uma linha vazia no final, sempre foi assim.

Se deseja controlar a geração exata do arquivo, então a solução temporária é converter a string de todas as linhas concatenadas (incluindo CRLF) para a codificação padrão, suponho que você tenha um sistema Unicode, então é UTF-8, e escrever o arquivo no modo BIN.

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

SIM, CRLF é adicionado ao final de cada linha pelo GUI_DOWNLOAD, quando chamado com o modo ASC. Acredito que o parâmetro WRITE_LF_AFTER_LAST_LINE não é utilizado, desculpe!

Ao usar o TRANSFER em um servidor Windows, por padrão, um CRLF é escrito ao final de todas as linhas, incluindo a última, então se você tiver uma linha vazia no final, sempre foi assim.

Se desejar controlar a geração exata do arquivo, então a solução é converter a string de todas as linhas concatenadas (incluindo CRLF) para a codificação padrão, suponho que você tenha um sistema Unicode, então é UTF-8, e escrever o arquivo em 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?