Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Daten aus String Grid an Logdatei anfügen (https://www.delphipraxis.net/57057-daten-aus-string-grid-logdatei-anfuegen.html)

hirnstroem 15. Nov 2005 07:50


Daten aus String Grid an Logdatei anfügen
 
'loha Folks,

ich speichere Daten folgendermassen aus einem StringGrid in eine Datei ab.

Delphi-Quellcode:
procedure TFCDPS_Observer.LogFileTimerTimer(Sender: TObject);
var
  iRow: integer;
  DateStr: string;
  sl: TStringList;
begin
  sl := TStringList.Create;
  DateStr := FormatDateTime('YYYY_MM_DD', Date);
  for iRow := 0 to sg_data_ld.RowCount - 1 do
    sl.Add(sg_data_ld.Rows[iRow].CommaText);
  sl.SaveToFile('C:\' + DateStr +'_DSC_Observer.log');
  sl.Free;
end;
Nun möchte ich aber, dass Diese Prozedur, welche alle Paar Minuten die Werte des StringGrids abspeichert, die alten Werde im File nicht überschreibt, sondern auf einer neuen Zeile und zusätzlich durch einen Zeitstempel abgetrennt alle neu eintreffenden Werte hinzufügt. Lediglich an einem neuen Tag soll auch ein neues Textfile erstellt werden.

thx

Sharky 15. Nov 2005 08:07

Re: Daten aus String Grid an Logdatei anfügen
 
Hai hinrstroem,

ich würde einfach prüfen ob es das Logfile schon gibt, wenn ja dieses erst in die StingList laden.
Delphi-Quellcode:
procedure WriteLogFile(aDataGrid: TStringGrid);
var
  iRow: integer;
  DateStr: string;
  sl: TStringList;
  filename: string;
begin
  DateStr := FormatDateTime('YYYY_MM_DD', Date);
  filename := 'C:\' + DateStr + '_DSC_Observer.log';
  sl := TStringList.Create;
  try
    if FileExists(filename) then
    begin
      sl.LoadFromFile(filename);
    end;
    for iRow := 0 to Pred(aDataGrid.RowCount) do
    begin
      sl.Add(aDataGrid.Rows[iRow].CommaText);
    end;
    sl.SaveToFile(filename);
  finally
    sl.Free;
  end;
end;

procedure TDemoForm.btn_LogClick(Sender: TObject);
begin
  WriteLogFile(StringGrid1);
end;

marabu 15. Nov 2005 09:54

Re: Daten aus String Grid an Logdatei anfügen
 
Hallo Leute.

Der Speichervorgang lässt sich noch "vereinfachen". Hier ein Beispiel ohne safety code:

Delphi-Quellcode:
procedure TFCDPS_Observer.SaveToLog(s: TStrings; fileName: string);
var
  fs: TFileStream;
  fm: word;
begin
  if FileExists(fileName)
    then fm := fmOpenReadWrite
    else fm := fmCreate;
  fs := TFileStream.Create(fileName, fm, fmShareDenyWrite);
  fs.Seek(0, soFromEnd);
  s.SaveToStream(fs);
  fs.Free;
end;
Zur Timer-Routine: Der Timer sollte für die Dauer der Speicheraktivität deaktiviert werden. Wenn es eine Überschriftszeile im Grid gibt, dann muss die Laufvariable bei StringGrid.FixedRows starten.

Grüße vom marabu

Noch 39 Tage bis Weihnachten.

hirnstroem 15. Nov 2005 10:25

Re: Daten aus String Grid an Logdatei anfügen
 
Alles klar, vielen Dank euch beiden, jetzt funzt das ganze tadellos.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz