Fórum Linhas em TXT #336418

18/01/2007

0

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

Responder

Posts

18/01/2007

Emerson Nascimento

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;



Responder

Gostei + 0

18/01/2007

Eng_diehl

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


Responder

Gostei + 0

18/01/2007

Emerson Nascimento

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;



Responder

Gostei + 0

18/01/2007

Eng_diehl

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


Responder

Gostei + 0

18/01/2007

Eng_diehl

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


Responder

Gostei + 0

18/01/2007

Emerson Nascimento

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


Responder

Gostei + 0

19/01/2007

Eng_diehl

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;


Responder

Gostei + 0

19/01/2007

Emerson Nascimento

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;



Responder

Gostei + 0

19/01/2007

Eng_diehl

Legal... valeu

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

Abraço


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar