Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
lmendes.cps
Rank: Estagiário Sênior
Mensagens: 13 Registrado em: Seg, 20 Jun 2011 2:14 pm
Localização: Campinas - SP
Seg, 19 Set 2011 11:56 am
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);
stcoutinho
Moderador
Mensagens: 850 Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP
Seg, 19 Set 2011 2:51 pm
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
Mensagens: 13 Registrado em: Seg, 20 Jun 2011 2:14 pm
Localização: Campinas - SP
Seg, 19 Set 2011 3:07 pm
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
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
Seg, 19 Set 2011 3:45 pm
Desculpa, mas pelo que conheço de manipulação de arquivos, com UTL_FILE sempre gerará uma linha em branco após o close...
stcoutinho
Moderador
Mensagens: 850 Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP
Seg, 19 Set 2011 3:51 pm
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
dr_gori
Moderador
Mensagens: 5013 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
Seg, 30 Jul 2012 6:31 pm
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
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
Ter, 31 Jul 2012 10:40 am
Brother,
Além do q foi passado pelo nosso amigo STCoutinho, poderia verificar o teu "exit", se está correto.
Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes