ler uma linha txt e deletar

Delphi

24/08/2006

caros amigos , estou precisando de uma ajuda pois não tenho ideia com fazer para o meu programinha ler todo arquivo txt depois se encontra o a linha que tenha uma data ele deleta da aquela para traz
por ex:

coleta.txt
0000050214060821075107040102
0000600261060821075344040102
0000050038060822075551040102
0000050140060822075628040102
0000050045060823075803040102
0000050141060823075950040102
0000050116060823080100040102
0000050076060823081028040102
0000050034060823085922040102 /060823/ e a data

preciso que ler e quando achar data 060822 deletar desta linha para traz


se alguem poder ajuda agradece pois conheço muito pouco em delphi

Att.
Emerson


Emerson1

Emerson1

Curtidas 0

Respostas

Siam

Siam

24/08/2006

Acho que diretamente no arquivo txt não dá para fazer.
Utilize um TStringList, execute LoadFromFile, faça as operações e depois execute SaveToFile.


GOSTEI 0
Beto_martini

Beto_martini

24/08/2006

Para fazer direto do arquivo vc teria na verdade que salvar o conteúdo em um outro arquivo.

Ex:

Abre arquivo 1
abre arquivo 2

lê arquivo 1 até encontrar a data

à partir daí, grave o restante no arquivo 2.

Se não souber como fazer as operações entre em contato. Ok?


GOSTEI 0
Fabiano Góes

Fabiano Góes

24/08/2006

procedure NewTxt( pathArq, Data: String );
var Arquivo, NovoArq: TStringList;
    i, Index: Integer;
    linha: String;
begin
  Index := 0;
  Arquivo := TStringList.Create;
  NovoArq := TStringList.Create;

  try
    Arquivo.LoadFromFile(pathArq);

    for i := 0 to Arquivo.Count - 1 do
    begin
      linha := Arquivo.Strings[i];
      if copy(linha, 11, 06) = Data then
      begin
        index := i + 1;
        Break;
      end;
    end;

    for i := Index to Arquivo.Count - 1 do
      NovoArq.Add(Arquivo.Strings[i]);

    NovoArq.SaveToFile(pathArq);
    ShowMessage(´concluido !!!´);
  finally
    FreeAndNil(Arquivo);
    FreeAndNil(NovoArq);
  end;
end;


usar assim:
NewTxt(´c:\coleta.txt´, ´060822´);


obs: se a sua condição é apenas a data ´060822´, esta função conta apartir da primeira que encontra.
testa e posta se funcionou ou não !!!

abraço !!!


GOSTEI 0
Antseralves

Antseralves

24/08/2006

Se não quiser fazer no mesmo arquivo use o metodo [b:bbe2d57456] Delete[/b:bbe2d57456].

procedure TForm1.DelData(PathArq,Data : string);

var S : TstringList;
I,Cont : integer;

begin
S := TStringList.Create;
S.LoadFromFile(PathArq);
Cont := S.Count;
I := 0;
while I < Cont do
begin
if Copy (S.Strings[I],1,8) = Data then
begin
S.Delete(I);
Dec(Cont);
end
else
Inc(I);
end;
S.SaveToFile(PathArq);
S.Free;
end;


GOSTEI 0
Emerson1

Emerson1

24/08/2006

Fabiano Góes
muito obrigado deu certinho...agora eu vou pensar um jeito de o sistema olhar data do dia - 30 e jogar la no codigo que vc me passou

valeu


GOSTEI 0
Fabiano Góes

Fabiano Góes

24/08/2006

emerson1,

não entendi o que você dize com:
agora eu vou pensar um jeito de o sistema olhar data do dia - 30 e jogar la no codigo que vc me passou


se você postar mais detales eu posso tentar te ajudar.

abraço !!![/code]


GOSTEI 0
Emerson1

Emerson1

24/08/2006

Fabiano Góes

ex: quando clicar no botão o sistema olhar a data do dia 29/08/2006 pega essa data (- 30)dias=060729 e colocar no parametro

NewTxt(´c:\coleta.txt´, ´060729´);

fabiano góes desculpa se não fui claro.... mas ja agradeço sua ajuda muito obrigado......


GOSTEI 0
Fabiano Góes

Fabiano Góes

24/08/2006

emerson1,

descupe a demora, eu estava meio enrolado aqui no trampo.

se você ainda não conseguiu a solução pra sua data-30 ai vai:

NewTxt(´c:\coleta.txt´, FormatDateTime( ´yymmdd´, (Now-30) ) );



cara nem testei, teata ai depois post pra saber se funcionou;


GOSTEI 0
Emerson1

Emerson1

24/08/2006

Fabiano Góes

deu certo...muito obrigado......valeuuuuuu


GOSTEI 0
Fabiano Góes

Fabiano Góes

24/08/2006

Falowwww mano,
se precisar tamo ai !!!!
abraxxxx !!!


GOSTEI 0
POSTAR