Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zeilen in delphi (https://www.delphipraxis.net/204585-zeilen-delphi.html)

Itachi 9. Jun 2020 11:03

Zeilen in delphi
 
Hallo,

ich will ein Programm zur Erstellung einer Protokolldatei mit maximal 200 Zeilen, und Wenn 200-Zeilen erreicht sind, soll diese Datei umbenannt auf Datei(nummer).ext umbenannt werden

aber ich weiß gar nicht was ich machen muss ich bin ja noch neu.
wäre super wenn jemand mir helfen kann.

Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  log('FormCloseQuery');
  if
    MessageDlg ('Programm schließen?', mtConfirmation, [mbOk, mbCancel], 0) = mrCancel
    then
     CanClose:= False;
end;


procedure TForm1.Log(Text:string);
var
  F : Textfile;
  Filename: String;
  DT: String;
begin
  Filename := Extractfilepath(Application.ExeName) + 'Log.TXT';
  Assignfile(f, filename);
  if
    FileExists(filename)
    then
      Append(f)
  else
    Rewrite(F);
    DT := formatDAteTime ('dd:mm:yyyy hh:mm:ss.zzz', now);
    WriteLn(f, DT,' : ', Text);
    CloseFile(f)
:cry:,

Der schöne Günther 9. Jun 2020 11:14

AW: Zeilen in delphi
 
Hallo und Willkommen :love:

Zwei Fragen vorab:
  1. Bist du dir sicher dass du wirklich jedes mal deine Log-Datei neu öffnen, eine Zeile anhängen und wieder schließen willst?
  2. Erzähl mal mehr zu deiner
    Delphi-Quellcode:
    (nummer)
    . Soll das Programm bei Start immer bei Nummer 1 anfangen oder willst du bereits bestehende Dateien mit einbeziehen? Heißt: Von letzter Woche existieren noch Log34.txt, Log35.txt und jetzt neue Einträge kommen in eine neue Log36.txt?

Unabhängig von Frage 2 brauchst du in deiner TForm1 eine Variable die sich merkt wie viele Zeilen du schon geschrieben hast. Theoretisch könntest du bei jedem Aufruf von
Delphi-Quellcode:
Log(Text:string)
durch die gesamte Datei spulen und die Zeilen zählen aber das wäre wirklich nicht das Richtige. Du brauchst eine Variable die du bei jedem Aufruf von
Delphi-Quellcode:
Log(Text:string)
hochzählst. Wenn der Wert bei 200 ist, dann weißt du dass es jetzt genug Zeilen sind und du eine neue Datei aufmachen musst.

Das sähe ungefähr so aus:

Delphi-Quellcode:
type  
    TForm1 = class(TForm)
        (...)
        var numberOfLogLines: Integer;
    end;


procedure TForm1.Log(Text: String);
begin
  (...)
  numberOfLogLines := numberOfLogLines + 1;
  if(numberOfLogLines = 200) then
    begin
      (...)
      numberOfLogLines := 0;
    end;
end;
Bis dahin verstanden?

DieDolly 9. Jun 2020 11:16

AW: Zeilen in delphi
 
Zitat:

Assignfile
Du kannst dir das alles außerdem viel einfacher machen, wenn du eine TStringList benutzt.

Und wenn ich das hier sehe habe ich ein bisschen Angst, dass du in Python-Syntax schreibst.
Delphi-Quellcode:
Begin
und
Delphi-Quellcode:
End
sind sehr wichtig!
Drück mal in Delphi wenn du den Code vor dir hast STRG+D.

Delphi-Quellcode:
procedure TForm1.Log(Text:string);
var
  F : Textfile;
  Filename: String;
  DT: String;
begin
  Filename := Extractfilepath(Application.ExeName) + 'Log.TXT';
  Assignfile(f, filename);
  if
    FileExists(filename)
    then
      Append(f)
  else
    Rewrite(F);
    DT := formatDAteTime ('dd:mm:yyyy hh:mm:ss.zzz', now);
    WriteLn(f, DT,' : ', Text);
    CloseFile(f)

himitsu 9. Jun 2020 11:18

AW: Zeilen in delphi
 
OK, 200 Zeilen ist NICHTS,
aber TStringList für ein großes Log, da würdest du dir keine Freude/Freunde mit machen. @Dolly


Am Einfachsten ist natürlich eine Prüfung auf die Dateigröße, anstatt der Zeilenanzahl.

Für die Zeilen mußt du dir entweder merken wieviele Zeilen drin sind,
oder du mußt die Datei öffnen und die Zeilen zählen,
also erstmal den Inhalt einlesen:
* Zeilen einlesen und mitzählen (ReadLn, TStringList.Count, Length(TFile.ReadAllLines), ...)
* oder als ein String/Stream und die Zeilenumbrüche zählen (z.B. Anzahl des Zeichens #10)

Delphi-Referenz durchsuchenTFile
AppendAllText
AppendText + Write
OpenText + Read
ReadAllText
ReadAllLines
...

Jumpy 9. Jun 2020 11:35

AW: Zeilen in delphi
 
Damit die Zahl der Logs nicht unendlich wächst, wäre vielleicht ein rollierendes Log auch ein weiter Schritt. Wenn du die Anwendung so kinfigurierst, dass Sie maximal X Logdateien verwaltet, dann fängst du wenn Datei X voll ist wieder an in Datei 1 zu schreiben.

Itachi 9. Jun 2020 11:54

AW: Zeilen in delphi
 
ich danke dir!!:|:thumb: @Der schöne Günther

ja nicht ganz aber durch den code wusste ich was du meintest.

vielleicht habe ich auch nicht gut erklärt so:

ich habe eine Logdatei erstellt und es gibt LogMessage die in der Logdatei sind ( z.b. form destroy....)
und wenn die logMessage in die Logdatei die zahl 200 erreicht haben soll das Programm eine neue logfatei machen und die alte umbennen auf (Nummer). und das soll immer eine logdatei erstellen bis 5 stück


ich hoffe das ist gut erklärt

allerdings bin auch Azubi also neu hier und in der Programmierung :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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