Excluir Header e Trailer de TXT
Bom Dia a todos,
Estou com um arquivo importado de um banco de dados do cliente. Esse arquivo tem 3 linhas de header que preciso excluir e 1 linha no final do arquivo que tb preciso excluir.
Como poderia afzer isso?
O Arquivo é esse
Estou com um arquivo importado de um banco de dados do cliente. Esse arquivo tem 3 linhas de header que preciso excluir e 1 linha no final do arquivo que tb preciso excluir.
Como poderia afzer isso?
O Arquivo é esse
Rede Periodo:|01/07/2008|A|17/07/2008| Suc|Apolice|Item|Endosso|Marca|Modelo| 01| 102153111| 19| 44315801|CHEVROLET |WIND 1.0 MPFI 8V 02| 555553139| 20| 11115801|CHEVROLET |HATCH SUPER 1.0 MPFI 03| 471453139| 21| 44445841|CHEVROLET |WIND 1.0 MPFI 8V 04| 745823139| 22| 77845801|CHEVROLET |CLASSIC 1.0 MPFI 8V FIM|
Shion86
Curtidas 0
Respostas
Aroldo Zanela
28/07/2008
Colega,
Veja um exemplo:
Veja um exemplo:
procedure TForm1.btn1Click(Sender: TObject); var Arquivo, Campos: TStringList; I, N: Integer; begin Arquivo := TStringList.Create; Campos := TStringList.Create; Arquivo.LoadFromFile(´d:\dados\arquivo.txt´); N := Arquivo.Count-1; for I := 0 to N do begin if (I>2) and (I<N) then // Diferente de header e trailler begin Campos.Clear; SplitString(Arquivo[I], ´|´, Campos); Campos[0]; // Sucursal Campos[1]; // Apólice Campos[2]; // Item Campos[3]; // Endosso Campos[4]; // Marca Campos[5]; // Modelo end; end; Campos.Free; Arquivo.Free; end; Function IScan( ch: Char; Const S: String; fromPos: Integer ): Integer; var i: Integer; Begin Result := 0; For i := fromPos To Length(S) Do Begin If S[i] = ch Then Begin Result := i; Break; End; End; End; Procedure SplitString( Const S: String; separator: Char; substrings: TStringList ); var i, n: Integer; Begin If Assigned( substrings ) and ( Length( S )>0 ) Then Begin i:= 1; Repeat n := IScan( separator, S, i ); If n = 0 Then n:= Length( S )+1; substrings.Add( Copy( S,i,n-i )); i:= n+1; Until i>Length( S ); End; End;
GOSTEI 0
Shion86
28/07/2008
Oi Aroldo, mto obrigado pelo exemplo.
surgiu uma dúvida, como faço agora p gravar os dados no mesmo arquivo TXT??
surgiu uma dúvida, como faço agora p gravar os dados no mesmo arquivo TXT??
GOSTEI 0
Aroldo Zanela
28/07/2008
Colega,
Você pode explicar um pouco mais sobre a sua necessidade?
Você pode explicar um pouco mais sobre a sua necessidade?
GOSTEI 0
Luciano.lirio
28/07/2008
Faz assim que da certo.
procedure TForm1.Button1Click(Sender: TObject); var ArqEnt: TextFile; ArqSai: TextFile; Linha: String; NomeEntrada: String; NomeTemp: String; begin NomeEntrada := ´C:\Teste.txt´; NomeTemp := ´C:\Teste.tmp´; Reset(ArqEnt,NomeEntrada); ReWrite(ArqSai,NomeTemp); ReadLn(ArqEnt,Linha); ReadLn(ArqEnt,Linha); ReadLn(ArqEnt,Linha); while not eof(ArqEnt) do begin ReadLn(ArqEnt,Linha); if UpperCase(Copy(Linha,1,3)) = ´FIM´ then Break; WriteLn(ArqSai,Linha); end; CloseFile(ArqEnt); CloseFile(ArqSai); DeleteFile(NomeEntrada); RenameFile(NomeTemp,NomeEntrada); end;
GOSTEI 0
Aroldo Zanela
28/07/2008
Oi Aroldo, mto obrigado pelo exemplo.
surgiu uma dúvida, como faço agora p gravar os dados no mesmo arquivo TXT??
Colega,
Seria interessante você expor a sua necessidade com mais detalhe, caso necessite de fazer algo mais além de simplesmente remover header e trailler. Se for só isso mesmo, o código abaixo também resolve. Porém, caso o arquivo seja processado mais de uma vez, haverá perdas de dados. Normalmente, é prudente utilizar uma extensão diferente para o arquivo processado, visando evitar isso.
Veja um exemplo da forma que você solicitou:
procedure TForm1.btn1Click(Sender: TObject); begin with TStringList.Create do begin LoadFromFile(´d:\dados\arquivo.txt´); Delete(0); // Remove a primeira linha na posição 0 e reorganiza Delete(0); // Remove a segunda linha que agora está na posição 0 e reorganiza Delete(0); // Remove a terceira linha que agora está na posição 0 e reorganiza Delete(Count-1); // Remove a última linha SaveToFile(´d:\dados\arquivo.txt´); end; end;
GOSTEI 0
Shion86
28/07/2008
Bom dia a todos,
Aroldo, desculpe se me expressei mal.
Vou tentar explicar melhor, eu recebo diariamente do cliente um arquivo em formato TXT e esse arquivo vem dados da base deles.
O problema é que são vários arquivos e sempre com header(3 linhas) e trailler(1 linha), então eu sempre tenho que fazer o processo de abrir 1 por 1 dos arquivos e excluir manualmente.
Fiz os testes aqui com os programinhas que vc e o Luciano me passaram e funcionouuu perfeitamente :D !!!
Muito Obrigado pela ajuda de vcs !!!
Abraços!
Aroldo, desculpe se me expressei mal.
Vou tentar explicar melhor, eu recebo diariamente do cliente um arquivo em formato TXT e esse arquivo vem dados da base deles.
O problema é que são vários arquivos e sempre com header(3 linhas) e trailler(1 linha), então eu sempre tenho que fazer o processo de abrir 1 por 1 dos arquivos e excluir manualmente.
Fiz os testes aqui com os programinhas que vc e o Luciano me passaram e funcionouuu perfeitamente :D !!!
Muito Obrigado pela ajuda de vcs !!!
Abraços!
GOSTEI 0