![]() |
Zeilenanzahl bei name.log Datei begrenzen
Hallo, ich habe eine Datei erstellt. Will jetzt dass da aber nur max 1000 Zeilen rein dürfen.. werden es mehr sollen die ersten zeilen wieder gelöscht werden und die neuen hintenrangehängt.. Wie mache ich das am besten?
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Wenn es eine Zeilenbasierte Datei mit Stringinhalten ist, könntest Du StringList verwenden.
Einlesen, Count prüfen, jeweils erste Zeilen [0,1,..] löschen bis Count <=1000, dann wieder in die Datei speichern. Gruß, Christoph |
Re: Zeilenanzahl bei name.log Datei begrenzen
Hallo,
am einfachsten lädst du die Datei (StringList.LoadFromfile), löscht die Anzahl der Zeilen, aus der Liste, die neu hinzukommen sollen for i:= 1 to 10 do begin StringList.Delete(0); end; und fügst die neuen Zeilen hinzu. StringList.Add() und dann SavetoFile Der obige Code geht davon aus dass schon 1.000 Zeilen dirnsind, muss also etwas angepasst werden. Aber die Vorgehensweise sollte klar sein, ein bissel sollst du ja auch machen ;) Heiko |
Re: Zeilenanzahl bei name.log Datei begrenzen
Es werden aber zur Laufzeit neue Zeilen hineingeschrieben...Das heißt, ich müsste ständig prüfen, ob die Zeilenanzahl schon erreicht ist... Oder? Mit nem Timer oder wie?
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Hallo,
ich würde das Problem etwas anders angehen. Ist die die Datei "voll", hat also 1000 Zeilen erreicht wird sie umbenannt in datei_01.txt. Eine neue Datei.txt wird angelegt. Und das Spiel beginnt von vorne. Du mußt Dir dann nur noch überlegen wieviele Dateien Du vorhalten willst. Grüße Klaus |
Re: Zeilenanzahl bei name.log Datei begrenzen
Ich möchte aber nur eine Datei. Wozu mehrere?
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Zitat:
Grüße Klaus |
Re: Zeilenanzahl bei name.log Datei begrenzen
also,
ich würd es so machen wie schon oben gesagt immer wenn diu eine zeile in deimen programm schreibst löschst du gleichzeitig eine. und am anfang erstellst du eine datei mit 1000 lehren zeilen. einfacher get es eben nicht |
Re: Zeilenanzahl bei name.log Datei begrenzen
Zitat:
Also Zeile schreiben -> 1000 Zeilen erreicht? Ja, dann Zeilen löschen Nein, dann Funktion beenden |
Re: Zeilenanzahl bei name.log Datei begrenzen
Ich glaube fast das hier mal wieder eine entscheidende Information fehlt!
Wie kommen die Daten denn in die Datei? Von Deiner Anwendung oder, wie ich vermute, von einer anderen Anwendung? Im zweiten Fall sehe ich keine möglichkeit sicherzustellen das in der Datei nur 1000 Zeilen stehen. |
Re: Zeilenanzahl bei name.log Datei begrenzen
Wenn die Delphiversion Class-Helper unterstützt, dann ginge sowas, für alle Nachfahren von TStrings:
Delphi-Quellcode:
z.B. maximal 1000 Zeilen:
Type TStringsAddHelper = Class Helper for TStrings
Function TruncedAdd(Const S: String; MaxLines: Integer): Integer; End; Function TStringsAddHelper.TruncedAdd(Const S: String; MaxLines: Integer): Integer; Begin If MaxLines > 0 Then While Count >= MaxLines do Delete(0); Result := Add(S); End;
Delphi-Quellcode:
SL := TStringList.Create;
SL.TruncedAdd('string', 1000); // oder Memo1.Lines.TruncedAdd('string', 1000); |
Re: Zeilenanzahl bei name.log Datei begrenzen
Also LogFile ist vorgegeben als TLogFile. Da hab ich auch nicht die Wahl daraus ne StringList zu machen.
Wie lösche ich also eine Zeile aus nem TLogFile? |
Re: Zeilenanzahl bei name.log Datei begrenzen
Was ist denn TLogFile für eine Klasse? Mein D2007 kennt die zummindest nicht.
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Was von meinem Vorgänger
Delphi-Quellcode:
type
TLogFile = class(TObject) private FFileName: String; FLogSize: Integer; FAppLog: Boolean; public constructor Create(FileName: string; LogSize: integer; AppLog: boolean); destructor Destroy; override; procedure AddLine(Line: string); property FileName: string read FFileName; end; |
Re: Zeilenanzahl bei name.log Datei begrenzen
Wo werden die Lines denn gespeichert ? Also ich kann kein Array / keine Liste / oder sonstiges im Private Bereich sehen...
MfG |
Re: Zeilenanzahl bei name.log Datei begrenzen
Das sind aber etwas zu wenig Infos, als dass man nun einen gescheiten Rat geben könnte. Vermutlich werden in der Klasse die Strings ja auch in einer Liste verwaltet, in dem Stück Code ist davon aber nichts zu sehen.
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Delphi-Quellcode:
constructor TLogFile.Create(FileName: string; LogSize: integer;
AppLog: boolean); begin FFileName := FileName; FLogSize := LogSize; FAppLog := AppLog; end; procedure TLogFile.AddLine(Line: string); var F: TextFile; Zeile: String; begin FileMode := fmOpenReadWrite; AssignFile(F, FFileName); try Append(F); except Rewrite(F); end; Zeile := FormatDateTime('c.zzz - ', Now)+Line; WriteLn(F, Zeile); CloseFile(F); end; |
Re: Zeilenanzahl bei name.log Datei begrenzen
Ahja, es wird also direkt in die Datei geschrieben. Aber Du könntest die AddLine-Methode ja dahingehend ändern, dass diese eine TStringlist verwendet.
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Und dann? Hab ich überall Fehlermeldungen, weil die Uni Logfile.pas von vielen anderen Units benutzt wird..
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Zitat:
Zitat:
Gruß, Christoph |
Re: Zeilenanzahl bei name.log Datei begrenzen
Wieso Fehlermeldungen? An der Methodensignatur ändert sich ja nichts.
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Ich steh voll aufm Schlauch. Weiß net so richtig was ihr meint.. :pale:
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Es kann den anderen Programmen doch Wurscht sein, wie die Klasse intern arbeitet. Solange die Methoden aufrufkompatibel bleiben, sollte es auch keine Fehlermeldungen geben.
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Delphi-Quellcode:
Daraus sollst du machen:
procedure TLogFile.AddLine(Line: string);
var F: TextFile; Zeile: String; begin FileMode := fmOpenReadWrite; AssignFile(F, FFileName); try Append(F); except Rewrite(F); end; Zeile := FormatDateTime('c.zzz - ', Now)+Line; WriteLn(F, Zeile); CloseFile(F); end;
Delphi-Quellcode:
Die anderen programme, die die Klasse benutzen bekommen doch gar nicht mit, dass sich innerhalb der Methode was am Quellcode geändert hat.
procedure TLogFile.AddLine(Line: string);
var sl: TStringList; begin sl := TStringList.Create; ...; ...; ...; end; |
Re: Zeilenanzahl bei name.log Datei begrenzen
Delphi-Quellcode:
procedure TLogFile.AddLine(Line: string);
var LogFileList : TStringList; Zeile: String; begin LogFileList := TStringList.Create; try LogFileList.LoadFromFile(FFileName); // hier eine while-schleife, solange LogFileList.Count > 999 // innerhalb der schleife immer LogFileList.Delete(0); damit wird oberstes zeile gelöscht. // danach hat das file im speicher 999 zeilen und die 1000. zeile kann hinzugefügt werden Zeile := FormatDateTime('c.zzz - ', Now)+Line; LogFileList.Append(Zeile); LogFileList.SaveToFile(FFileName); finally LogFileList.Free; end; end; |
Re: Zeilenanzahl bei name.log Datei begrenzen
Das Problem ist auf das TLogFile greifen verschiedene Programm zu, das eine darf 1000 zeilen haben und das andere nur 300.
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Dann führ doch eine Property "MaxLines" oder so ein.
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Ich bin mal so großzügig ...
Delphi-Quellcode:
type
TLogFile = class private // ... FMaxLines: Cardinal; // diese variable dann irgendwo im Code setzen - bsp 1000 ... in deinem Fall ... public // ... property MaxLines: Cardinal Read FMaxLines Write FMaxLines; end; procedure TLogFile.AddLine( Line: String ); begin with TStringList.Create do begin try LoadFromFile( FFileName ); while Count > (MaxLines-1) do Delete(0); Add( FormatDateTime('c.zzz - ', Now)+Line ); SaveToFile( FFileName ); finally Free; end; end; end; |
Re: Zeilenanzahl bei name.log Datei begrenzen
Setze ich sie in meinem Programm, das nur 1000 zeilen haben soll auf
Delphi-Quellcode:
Sagt er mir undefinierter Bezeichner FMaxLines
logFile.FMaxLines := 1000;
Irgendwie klappt heute gar nix.. Zum glück habt ihr geduld |
Re: Zeilenanzahl bei name.log Datei begrenzen
Hallo,
public ist MaxLines, nicht FMaxLines. Heiko |
Re: Zeilenanzahl bei name.log Datei begrenzen
geht aber auch net
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Hallo
1. geht nicht, ist keine Fehlermeldung 2. wenn man dir schon fast alles hier hinschreibt, wäre es schön, wenn du auch mal den Debugger anwerfen würdest und nicht auf eine komplette Lösung warten würdest. Heiko |
Re: Zeilenanzahl bei name.log Datei begrenzen
dieselbe fehlermeldung wie bei FMaxLines
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Weißt du was, vergiss das ganze und lern erst einmal die Delphi-Syntax!
Ist wirklich nur gut gemeint, denn so kommst du nicht weit. Und Grundlegende Sachen zu vermitteln ist nervig! MfG |
Re: Zeilenanzahl bei name.log Datei begrenzen
Zitat:
Gruß, Christoph |
Re: Zeilenanzahl bei name.log Datei begrenzen
Also, ich habe es jetzt in Ruhe durchgearbeitet und es geht fast.
Delphi-Quellcode:
An der markierten Stelle, scheint etwas nicht zu stimmen. Beim Ausführen des Programms, sagt er, dass er die Datei nicht findet. Obwohl doch erst Create und dann Add kommt?
procedure TLogFile.AddLine(Line: string);
var LogFileList : TStringList; Zeile: String; begin LogFileList := TStringList.Create; try [color=#ff001f]LogFileList.LoadFromFile(FFileName);[/color] while LogFileList.Count > (MaxLines-1) do LogFileList.Delete(0); LogFileList.Add(FormatDateTime('c.zzz - ', Now)+Line); LogFileList.SaveToFile(FFileName); finally LogFileList.Free; end; end; |
Re: Zeilenanzahl bei name.log Datei begrenzen
Hi,
wenn die Logdatei noch nicht existiert, dann kann sie auch nicht geladen werden. Daher:
Delphi-Quellcode:
Gruß
procedure TLogFile.AddLine(Line: string);
var LogFileList : TStringList; Zeile: String; begin LogFileList := TStringList.Create; try If FileExists(FFileName) then LogFileList.LoadFromFile(FFileName); while LogFileList.Count > (MaxLines-1) do LogFileList.Delete(0); LogFileList.Add(FormatDateTime('c.zzz - ', Now)+Line); LogFileList.SaveToFile(FFileName); finally LogFileList.Free; end; end; Patrick |
Re: Zeilenanzahl bei name.log Datei begrenzen
Ahhh. Logisch :wall:
Danke |
Re: Zeilenanzahl bei name.log Datei begrenzen
Zusätzlich kannst du dir dann auch die While Schleife sparen.
|
Re: Zeilenanzahl bei name.log Datei begrenzen
Stimmt, aber es schadet ja auch nicht, wenn man es so lässt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 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-2025 by Thomas Breitkreuz