![]() |
AW: Bei wachsendendem Logfile auf bestimme Zeile reagieren
Merk Dir die Größe der Datei seit dem letzten Prüfvorgang (=StartPos).
Zum periodischen Prüfen: 1. Gehe in der Datei an Die Stelle 'StartPos+1' 2. Suche ab da bis zum Ende der Datei. 3. Anschließend setzt Du StartPos auf <Größe der Datei> StartPos ist am Anfang 0. |
AW: Bei wachsendendem Logfile auf bestimme Zeile reagieren
@Furtbichler > #7
|
AW: Bei wachsendendem Logfile auf bestimme Zeile reagieren
Wobei man gelegentlich das Archivieren von Logfiles nicht vergessen sollte. Eine zeitlang klappt das Anhängen. Ich hab mal eine Log von knapp 2 GB gesehen. Kunde meinte, dass das Programm früher etwas schneller war. Also ab und zu vorne etwas abschneiden, archivieren und alles anpassen.
|
AW: Bei wachsendendem Logfile auf bestimme Zeile reagieren
Zitat:
Na ja, eigentlich ist es doch das Gleiche aber eben nicht ganz.:roll: |
AW: Bei wachsendendem Logfile auf bestimme Zeile reagieren
Ich habe mir erstmal folgende Loesung gebastelt:
Delphi-Quellcode:
Mit diesem Code werden beim Programmstart nur die Zeilen in das Memo uebertragen, welche dem Suchstring entsprechen.
procedure TForm1.Button1Click(Sender: TObject);
var Inhalt: string; p:integer; begin Assignfile(Src,'C:\Users\tomatenmann\Documents\logoutput\Log.txt'); Reset(Src); memo1.Clear; while not EOF(Src) do begin ReadLn(Src, Inhalt); p := Pos('Suchtext', Inhalt); if p > 0 then begin //Reaktion auf gefundenen Suchstring memo1.Lines.Add(Inhalt); end; end; CloseFile(Src); end; Jeder weitere Eintrag in das Memo loest die gewuenschte Reaktion aus. Funktioniert. Das dumme ist: Wenn das Logfile mehrere Dutzend Megabytes gross wird kann es auf Dauer etwas unperformant werden, da ich bei jeder pruefung das gesamte logile zeilenweise neu einlese. Bloed ist auch dass mein Programm das File fuer andere Anwendungen "blockiert", deshalb muss ich bei jedem Vorgang das file wieder "closen" |
AW: Bei wachsendendem Logfile auf bestimme Zeile reagieren
Der bereits mehrfach erwähnte FileStream ([fmopenRead,fmShareDenyNone]), lesen ab letztem bekannten Ende, sollte diese Probleme lösen.
|
AW: Bei wachsendendem Logfile auf bestimme Zeile reagieren
Fassen wir doch mal zusammen,
Du hast eine Program (prg1) das in eine Datei schreibt (lg1). in dieser Datei werden verschiedene vordefinierte strings geschrieben, es wird kein Datum und keine Uhrzeit geschrieben. Zu einem beliebigen Zeitpunkt wird ein weiteres Program (prg2) gestartet, das alle Einträge, die nach prg2.Start in das lg1 gemacht werden, auf bestimmte Inhalte überprüft und ggf. eine optische und/oder akustische Meldung absetzt. ist das soweit richtig? Gruß K-H |
AW: Bei wachsendendem Logfile auf bestimme Zeile reagieren
Zitat:
|
AW: Bei wachsendendem Logfile auf bestimme Zeile reagieren
Ich würd' mir was von TStringList ableiten:
Delphi-Quellcode:
TLogFile = class(TStringList)
private FLoadCount: integer; FFileName: string; public procedure UpDate; procedure Refresh; function IndexOfSubString(const SubStr: string; var Index: integer): integer; function DeleteSubString(const SubStr: string): boolean; property LoadCount: integer read FLoadCount; property FileName: string read FFileName; constructor Create(const AFileName: string); end;
Delphi-Quellcode:
constructor TLogFile.Create(const AFileName: string);
begin inherited Create; FFileName:= AFileName; FLoadCount:= 0; Refresh; end; procedure TLogFile.Refresh; begin if FileExists(FFileName) then begin LoadFromFile(FFileName); FLoadCount := Count; end; end; procedure TLogFile.Update; begin if FileExists(FFileName) then LoadFromFile(FFileName); end; function TLogFile.IndexOfSubString(const SubStr: string; var Index: integer): integer; var I: integer; begin UpDate; Result := -1; Index := 0; for I:= FLoadCount to Count -1 do begin Index:= Pos(SubStr, Strings[I]); if Index > 0 then begin Result := I; Break; end; end; end; function TLogFile.DeleteSubString(const SubStr: string): boolean; var I, J: integer; S: string; begin Result:= false; I:= IndexOfSubString(SubStr, J); if I > -1 then begin Result:= true; S:= Strings[I]; System.Delete(S, J, Length(SubStr)); // ??? Strings[I]:= S; end; end; |
AW: Bei wachsendendem Logfile auf bestimme Zeile reagieren
Hat eigentlich jemand
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz