Pergunta

Eu tenho um programa que importa um arquivo de texto que tem muitos entrys:

###
Starttime: 06.03.2008
Data: SOME RECORDS HERE

###
Starttime: 21.03.2008
Data SOME RECORDS HERE

... e assim por diante

Não quero ter um tempo final após "Dados:" que é o próximo starttime -1 então eu tenho

###
Starttime: 06.03.2008
Data: SOME RECORDS HERE
EndTime: 20.03.2008

###
Starttime: 21.03.2008
Data SOME RECORDS HERE
EndTime: (next starttime -1)

... e assim por diante

Foi útil?

Solução

A maneira mais fácil seria ler o arquivo em um TStringList e trabalhar lá.

Pseudocódigo:

var 
  S: TStringList;
  i: Integer;
  LastDate: TDateTime;
  CurDate: TDateTime;
begin
  S := TStringList.Create;
  S.LoadFromFile('c:\...');

  i := 0;
  while i < S.Count do
  begin
    if S[i] = "###" then
    begin
      CurDate := StrToDate(S[i+1])
      S.Insert(i-3, DateToStr(CurDate));
      LastDate := CurDate;
      i := i+2;
    end else
    begin
      i := i+1;
    end;
  end;
  S.SaveToFile('c:\...');
end;

Este código não é muito robusto, não verificar quaisquer casos especiais, como a primeira data de início, mas deve ser suficiente para você começar.

Outras dicas

Bem, você terá que copiar o arquivo, linha por linha, e inserir as novas linhas no momento certo. Você não pode mudar coisas em um arquivo de texto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top