AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zeilen in delphi

Ein Thema von Itachi · begonnen am 9. Jun 2020 · letzter Beitrag vom 9. Jun 2020
Antwort Antwort
Itachi

Registriert seit: 9. Jun 2020
2 Beiträge
 
#1

Zeilen in delphi

  Alt 9. Jun 2020, 12:03
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)
,
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.091 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Zeilen in delphi

  Alt 9. Jun 2020, 12:14
Hallo und Willkommen

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 (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 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 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?
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#3

AW: Zeilen in delphi

  Alt 9. Jun 2020, 12:16
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.
Begin und 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)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zeilen in delphi

  Alt 9. Jun 2020, 12:18
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
...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Jun 2020 um 13:22 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Zeilen in delphi

  Alt 9. Jun 2020, 12:35
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.
Ralph
  Mit Zitat antworten Zitat
Itachi

Registriert seit: 9. Jun 2020
2 Beiträge
 
#6

AW: Zeilen in delphi

  Alt 9. Jun 2020, 12:54
ich danke dir!! @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

Geändert von Itachi ( 9. Jun 2020 um 13:59 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 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