Linhas em TXT

Delphi

18/01/2007

Ola galera do Delphi...

Estou desenvolvendo um aplicativo de monitoramento.
Preciso fazer um sistema de armazenamento de dados, onde os mesmos são salvos em um evento automático (tipo um timer).
Quero salvar os dados em um arquivo .txt e estou usando a seguinte rotina:

AssignFile(DBRALFM, SaveDialog1.FileName);
ReWrite(DBRALFM);
Writeln(DBRALFM,Timetostr(Hora),´ ´,a,´ ´,b);
CloseFile(DBRALFM);

Ele está salvando tudo certo mas com um problema: o algoritmo não pula linhas ou seja ele esta salvando sempre as informações sobre as ultimas informações. Está faltando um comando para que ele faça isto e não sei como fazer. Alguém sabe como posso fazer isto?

Um Abraço
Fabio


Eng_diehl

Eng_diehl

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

18/01/2007

tente assim:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  DBRALFM: TextFile;
  existe: boolean;
  arquivo: string;
begin
  arquivo := ´c:\teste_append.txt´;

  existe := FileExists(arquivo);

  AssignFile(DBRALFM, arquivo);
  if existe then
    Append(DBRALFM) // se existe, inclui o texto no arquivo
  else
    Rewrite(DBRALFM); // se não existe, cria o arquivo

  Writeln(DBRALFM,Timetostr(Now),´ ´,´Teste1´,´ ´,´Teste2´);

  CloseFile(DBRALFM);
end;



GOSTEI 0
Eng_diehl

Eng_diehl

18/01/2007

Grande ajuda Emerson...

Só que o nome do meu arquivo (onde eu armazenaria a principio os dados) era DBRALFM. Se com sua dica o arquivo é criado automaticamente, porque preciso utilizar o DBRALFM na rotina?

Abraço
Fabio


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

18/01/2007

na função, [b:21d37fb62e]DBRALFM[/b:21d37fb62e] não é o nome do arquivo, e sim uma variável texto usada para manipular o conteúdo do arquivo; o nome do arquivo, no exemplo é ´c:\teste_append.txt´

você poderá manter como no seu original:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  DBRALFM: TextFile;
  existe: boolean;
begin
  existe := FileExists(SaveDialog1.FileName);

  AssignFile(DBRALFM, SaveDialog1.FileName);

  if existe
  then Append(DBRALFM) // se existe, inclui o texto no arquivo
  else Rewrite(DBRALFM); // se não existe, cria o arquivo

  Writeln(DBRALFM,Timetostr(Hora), ´ ´, a, ´ ´, b);

  CloseFile(DBRALFM);
end;



GOSTEI 0
Eng_diehl

Eng_diehl

18/01/2007

Não irei manter o nome fixo.

Farei como voce sugeriu a primeira vez, todavia com a opção de escolha de diretorio e nome de arquivo com Edits.

Valeu pela ajuda...

Fabio


GOSTEI 0
Eng_diehl

Eng_diehl

18/01/2007

Blz??
Olha só como ele está gravando...
Queria que o numero da terceira coluna fosse compactado para 2 casas decimais. Usei a função RoundTo (a,-2).... mas nao deu certo não.

1/18/2007 5:45:54 PM 2.00000000000000E+0000
1/18/2007 5:45:55 PM 3.00000000000000E+0000
1/18/2007 5:45:56 PM 4.00000000000000E+0000
1/18/2007 5:45:57 PM 5.00000000000000E+0000
1/18/2007 5:45:58 PM 6.00000000000000E+0000

Tens alguma ideia??
Até mais
Fabio


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

18/01/2007

publique o código que você está usando. o problema deve estar nele, e não na função RoundTo()


GOSTEI 0
Eng_diehl

Eng_diehl

18/01/2007

Tá aiii...


procedure TForm1.Timer1Timer(Sender: TObject);
var
DBRALFM: textfile;
existe: boolean;
arquivo,s: string;
begin
Hora:=now;
s:=DateToStr(Hora);
if s[2] = ´/´ then
s:=s[3]+s[4]+´ ´+´0´+s[1]+´ ´+s[6]+s[7]+s[8]+s[9]
else
s:=s[4]+s[5]+´ ´+s[1]+s[2]+´ ´+s[7]+s[8]+s[9]+s[10];

Edit1.Text:=s;
nome:=s;

a:= a+1;
b:= a+b;
a:=RoundTo(a,-2);
b:=RoundTo(b,-2);


Edit2.text:=floattostr(a);
Edit3.text:=floattostr(b);

Series1.Addxy(Hora,a);
Series2.Addxy(Hora,2*a);

//salva os dados no arquivo criado
arquivo := ´c:\´+nome+´.txt´;
existe := FileExists(arquivo);

AssignFile(DBRALFM, arquivo);
if existe then
Append(DBRALFM)
else
ReWrite(DBRALFM);

Writeln(DBRALFM,Datetostr(Hora),´ ´,Timetostr(Hora),´ ´,a,´ ´,b);
CloseFile(DBRALFM);

end;


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

18/01/2007

procedure TForm1.Timer1Timer(Sender: TObject);
var
  DBRALFM: textfile;
  existe: boolean;
  arquivo,s: string;
begin
  // desligo o timer para não encavalar os processos
  Timer1.Enabled := False;

  Hora := now;
  s := FormatDateTime(´yyymmdd´,Hora);

  Edit1.Text:=s;
  nome:=s;

  a := a + 1;
  b := a + b;
  a := RoundTo(a,-2);
  b := RoundTo(b,-2);

  Edit2.text := floattostr(a);
  Edit3.text := floattostr(b);

  Series1.Addxy(Hora,a);
  Series2.Addxy(Hora,2*a);

  //salva os dados no arquivo criado
  arquivo := ´c:\´+nome+´.txt´;
  existe := FileExists(arquivo);

  AssignFile(DBRALFM, arquivo);

  if existe then
    Append(DBRALFM)
  else
    ReWrite(DBRALFM);

  Writeln(DBRALFM,Datetostr(Hora),´ ´,Timetostr(Hora),´ ´,
     format(´¬18.2f´,[a]),´ ´, format(´¬18.2f´,[b]));
  CloseFile(DBRALFM);

  // religo o timer
  Timer1.Enabled := True;
end;



GOSTEI 0
Eng_diehl

Eng_diehl

18/01/2007

Legal... valeu

Só por curiosidade qual a finalidade do ¬18???
E se eu quisesse alinhar um string?

Abraço


GOSTEI 0
POSTAR