Ultima Linha em branco - UTL_FILE

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
lmendes.cps
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Seg, 20 Jun 2011 2:14 pm
Localização: Campinas - SP

Amigos, bom dia.

Estou criando um arquivo txt para um layout que será lido pelo SAP.

Criei o arquivo normalmente, mas aparece abaixo da minha ultima linha, uma linha em branco, o que não está validando meu arquivo.

segue fonte:

Selecionar tudo

      
begin
        arquivo_saida := UTL_File.Fopen(sdiretorio,snome_arquivo, 'W',32767);
        UTL_File.Put_Line(arquivo_saida,sheader);
        -- detalhe do arquivo
        for r in linhas loop
          if length(sbuffer) + c_eollen + length(r.linha) <= c_maxline then
               sbuffer := sbuffer || c_eol || r.linha;
          else
             if sbuffer is not null then
                utl_file.put_line(arquivo_saida,sbuffer);
             end if;
             sbuffer := r.linha;
          end if;
          i:= i + 1;
        end loop;
        UTL_File.Put_Line(arquivo_saida,sbuffer);

        --trailer do arquivo
        i := i + 2;
        strailer := 'Z'||lpad(i, 8, '0');
        UTL_File.Put(arquivo_saida,strailer);
        UTL_File.Fclose(arquivo_saida);
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Imendes,

Não compreendo 100% a lógica do seu script, mas tente fazer com que na última linha a ser gravada em seu arquivo você utilize o comando utl_file.put, ao invés de utl_file.put_line.

Não sei se esta sugestão irá resolver o seu problema, mas é uma tentativa, certo? Pode ser que os outros foristas tenham outras sugestões para resolver o seu problema.

Abraços,

Sergio Coutinho
lmendes.cps
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Seg, 20 Jun 2011 2:14 pm
Localização: Campinas - SP

Sergio,

Grato pelo retorno.

Mas já tentei com o PUT na ultima linha, mas a linha em branco ainda persiste.

Desculpe pelo trecho do código, copiei de minha procedure e colei. Segue um exemplo simples que realizei:

Selecionar tudo

declare
  arquivo_saida   UTL_File.File_Type;
  sdiretorio      varchar2(50); 
begin
    sdiretorio := 'D:\INT_CCS_SGD\'; 
    arquivo_saida := UTL_File.Fopen(sdiretorio,'TESTE.TXT', 'W',32767);
    UTL_File.Put_Line(arquivo_saida,'LINHA 1');
    UTL_File.Put_Line(arquivo_saida,'LINHA 2');
    UTL_File.Put(arquivo_saida,'ULTIMA LINHA');
    UTL_File.Fclose(arquivo_saida);
end; 
o resultado é o seguinte:
1 LINHA 1
2 LINHA 2
3 ULTIMA LINHA
4
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Desculpa, mas pelo que conheço de manipulação de arquivos, com UTL_FILE sempre gerará uma linha em branco após o close...
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Imendes,

Consultei alguns foruns sobre o tema, mas não encontrei nada que ajudasse a evitar esta linha no final do arquivo.

Em uma thread, o forista aconselha a posteriormente ler o arquivo do inicio ao fim, gravando os dados deste em outro arquivo texto.

Parece uma solução lusitana, mas ele diz que com isso se pode evitar a linha em branco no final.

Creio que outros foristas podem dar sua opinião a respeito deste problema e de como resolver o mesmo.

Att.

Sergio
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Tente o seguinte:

Selecionar tudo

declare
Arquivo    UTL_FILE.FILE_TYPE ;     
vBuffer     VarChar2( 2000 ) ;         
begin

  vBuffer := 'Teste escrita';
  Arquivo := UTL_FILE.Fopen( '/usr/tmp', 'TESTE.TXT', 'w' );
  UTL_FILE.PUT_LINE(Arquivo, vBuffer ) ;
  UTL_FILE.PUT( Arquivo, vBuffer ) ; 
  UTL_FILE.FFLUSH(Arquivo); 
  UTL_FILE.FCLOSE(Arquivo) ;
end;
SAIDA: (sem linha em branco)

Selecionar tudo

[ora@brod02 tmp]$ cat TESTE.TXT
Teste escrita
Teste escrita
[ora@brod02 tmp]$
[ora@brod02 tmp]$
[ora@brod02 tmp]$
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Além do q foi passado pelo nosso amigo STCoutinho, poderia verificar o teu "exit", se está correto.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes