![]() |
Re: Für jeden Tag eine Datei erzeugen
Gut, dass die Uhrzeit nicht Namensbestandteil ist.
Grüße vom marabu |
Re: Für jeden Tag eine Datei erzeugen
Zitat:
wenn Du meinen Demo-Code ansiehst wirst Du erkennen das: Zitat:
|
Re: Für jeden Tag eine Datei erzeugen
Für die letzte ariante ist nur diese eine Prozedur nötig ... nichts weiter.
Delphi-Quellcode:
Du brauchst also nur AddToLog(...), statt Memo1.Lines.Add(...); aufzurufen und der Timer ist dan auch nicht mehr nötig.
procedure AddToLog(S: String);
var T: TextFile; FileName: String; begin FileName := 'FilePrefix_' + FormatDateTime('yyyy-mm-dd', Now) + '.txt'; AssignFile(T, FileName); If FileExists(FileName) Then Append(T) Else Rewrite(T); WriteLn(T, S); CloseFile(T); Memo1.Lines.Add(S); While Memo1.Lines.Count > 100 Then Memo1.Lines.Delete(0); end; Es iwrd in dieser Prozedure ja mit WriteLn(T, S); der Text in die Datei geschrieben und per Memo1.Lines.Add(S); in das Memo.
Delphi-Quellcode:
Zu APPEND und REWRITE findest du was in der OH, da aber APPEND fehlschlägt, wenn die Datei nicht existiert, wird in diesem Fall REWRITE verwendet ... getestet per FILEEXISTS.
If FileExists(FileName) Then Append(T) Else Rewrite(T);
|
Re: Für jeden Tag eine Datei erzeugen
Ich möchte nur nochmal Danke sagen für die WAHNSINN'S Unterstützung.
Mirco |
Re: Für jeden Tag eine Datei erzeugen
Hallo...
ich hab noch eine Bitte. Kann mir jemand diesen Quelltext kommentieren. Ich würde gerne verstehen was da genau passiert. Zum Beispiel würde ich gerne alle doppelten Zeilen aus der Textdatei entfernen. Verwende dafür folgenden Source:
Delphi-Quellcode:
Nun weiß ich nicht welchen Dateinamen ich dem Code unten eingeben muss.
function doppeltweg(datei:string):longword;
var m1,m2:longword; sl:TStringlist; begin sl:=TStringlist.Create; sl.loadfromfile(datei); m1:=sl.count; sl.sorted:=true; sl.loadfromfile(datei); m2:=sl.count; result:=m1-m2; sl.savetofile(datei); sl.free; end; procedure TForm1.Button1Click(Sender: TObject); begin doppeltweg('c:\test.txt'); end; Unten steht ja WriteToLog('c:\logs\log_', Edit1.Text, LastLog, ListBox1.Items); und um die doppelten Zeilen wegzubekommen muss ich ja folgendes machen: doppeltweg('c:\test.txt');
Delphi-Quellcode:
uses
Math; const myDateFormat = 'yyyy-mm-dd'; myTimeFormat = 'HH:mm'; function LogFileName(const ABaseName: string; ADateTime: TDateTime): string; begin Result := ABaseName + '_' + FormatDateTime(myDateFormat, ADateTime) + '.txt'; end; procedure WriteToLog(const aLogBase, aLogText: string; aLastLog: TDateTime; aStrings: TStrings = NIL); var LogName: string; Mode: Cardinal; LogFile: TFileStream; LogLine: string; LogTime: TDateTime; begin LogTime := now; LogLine := FormatDateTime(Format('%s %s', [myDateFormat, myTimeFormat]), LogTime) + ' ' + aLogText; LogName := LogFileName(aLogBase, LogTime); ForceDirectories(ExtractFilePath(LogName)); Mode := IfThen(FileExists(LogName), fmOpenWrite, fmCreate); LogFile := TFileStream.Create(LogName, Mode); try LogFile.Position := LogFile.Size; LogFile.Write(LogLine[1], Length(LogLine)); LogFile.Write(sLineBreak, 2); finally LogFile.Free; end; if Assigned(aStrings) then begin if Trunc(LogTime) > Trunc(aLastLog) then begin aStrings.Clear; end; aStrings.Add(LogLine); end; aLastLog := LogTime; end; // Demo Aufruf procedure TDemoForm.btn_testClick(Sender: TObject); var LastLog : TDateTime; begin WriteToLog('c:\logs\log_', Edit1.Text, LastLog, ListBox1.Items); end; |
Re: Für jeden Tag eine Datei erzeugen
isch hab jetzt nicht alles gelesen, aber möchte hinzufügen, dass es bei mir eine Funktion MakeDString gibt, die erzeugt für den aktuellen Tag einen Namen, der z.B. so aussieht:
2006 (06) 16.Juni - TWS1 -ErrorMsg.txt Für Logfiles sehr gut geeignet und für einen Menschen sehr gut lesebar, hat aber den Vorteil, dass die Dateien sortiert im Verzeichnis vorliegen. Vielleicht nützt Dir das ja was. Gruß stoxx
Delphi-Quellcode:
function makeDstring : string;
var Y, M, D : word; st : string; begin decodeDate(now, Y, M, D); result := inttostr(Y) + ' (' + Formatfloat('00', M) + ') ' + Formatfloat('00', D) + '.' ; case M of 1: st := 'Januar'; 2: st := 'Februar'; 3: st := 'März'; 4: st := 'April'; 5: st := 'Mai'; 6: st := 'Juni'; 7: st := 'Juli'; 8: st := 'August'; 9: st := 'September'; 10: st := 'Oktober'; 11: st := 'November'; 12: st := 'Dezember'; end; {ende case iMonat} result := result + st; end; // von MakeDString |
Re: Für jeden Tag eine Datei erzeugen
Hallo stoxx
JA vielen Dank, ich habs auch schon integrieren können und das BESTE, ich habs auch verstanden. Viele Grüße Mirco |
Re: Für jeden Tag eine Datei erzeugen
Hallo,
warum nutzt ihr nicht die VCL-Routinen?
Delphi-Quellcode:
Gruß Hawkeye
function makeDstring: string;
begin Result := FormatDateTime('yyyy (mm) dd.mmmm', Date); end; |
Re: Für jeden Tag eine Datei erzeugen
Zitat:
die Routine ist schon etwas älter ;-) |
Re: Für jeden Tag eine Datei erzeugen
Wie wäre es mit LogFileName, welche ja schon in WriteToLog verwendet wird?
Also
Delphi-Quellcode:
doppeltweg(LogFileName('c:\logs\log_', Now));
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 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