AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Textdatei-Einträge rückwärts speichern

Textdatei-Einträge rückwärts speichern

Ein Thema von Guido Eisenbeis · begonnen am 2. Nov 2008 · letzter Beitrag vom 8. Nov 2008
Antwort Antwort
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#1

Textdatei-Einträge rückwärts speichern

  Alt 2. Nov 2008, 12:01
OK, der Titel ist nicht sehr aufschlussreich. Deshalb hier die ausführlichere Erklärung:

Bei meinen täglichen Daten-Backups lasse ich am Schluss Informationen in ein Logfile schreiben: Startzeit, Endzeit, Dauer. Dabei wird der jeweilige Eintrag jeden Tag an die vorhandenen angehängt.

Nun ist ja klar, dass dabei der neueste Eintrag ganz am Schluss steht. Jetzt hätte ich halt gerne, dass die Reihenfolge umgekehrt ist und der neueste Eintrag ganz am Anfang des Logfiles steht.

Mein bisheriger Ansatz ist, dass ich das vorhandene Logfile umbenenne in Logfile.txt.bak, ein neues Logfile.txt erstelle, dort den aktuellen Tages-Eintrag speichere und danach die Einträge aus dem bak hinzufüge.

Nachteil dabei ist allerdings, dass ab einer bestimmten Größe des Logfiles das schon heftig lange dauern kann!?

Was meint ihr dazu? Kann man das eleganter lösen?

Guido.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Textdatei-Einträge rückwärts speichern

  Alt 2. Nov 2008, 12:04
Beim Schreiben nicht, aber beim Anzeigen der Logdatei
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Textdatei-Einträge rückwärts speichern

  Alt 2. Nov 2008, 12:06
Hi

ja kann man

Lass doch einfach für jeden Tag ein eigenes Logfile erstellen:

Bsp.
Delphi-Quellcode:

  LogName := 'Logfile-'+FormatDateTime('yyyy-mm-dd', Date) + '.txt';
dann ist es schön klein, sortiert sich im Explorer gut, und du kannst alte logs bei Bedarf löschen.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Textdatei-Einträge rückwärts speichern

  Alt 2. Nov 2008, 12:07
Zitat von Guido Eisenbeis:
Was meint ihr dazu? Kann man das eleganter lösen?
Ja, ans Ende anhängen
Ansonsten in etwa:
Delphi-Quellcode:
var
   LogLines : TStringList;
begin
   LogLines := TStringList.Create;
   try
      LogLines.LoadFromFile('LogFile.txt');
      LogLines.Insert(0, 'Eintrag an erster Stelle');
      LogLines.SaveToFile('LogFile.txt');
   finally
      LogLines.Free;
   end;
end;
Natürlich ist das weder performant noch ressourcenschonend, aber übersichtlich.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Textdatei-Einträge rückwärts speichern

  Alt 2. Nov 2008, 12:19
Mit Streams ginge das auch:
Delphi-Quellcode:
procedure AddFirstLine(const sLine: string; const sFilename: TFilename);
var sStream: TStringStream;
    fStream: TFileStream;
begin
  fStream := TFileStream.Create(sFilename,fmOpenReadWrite);
  try
    sStream := TStringStream.Create(sLine);
    try
      sStream.WriteString(sLine + sLineBreak);
      sStream.CopyFrom(fStream,0);
      fStream.Position := 0;
      fStream.CopyFrom(sStream,0);
    finally
      sStream.Free;
    end;
  finally
    fStream.Free;
  end;
end;
Ist aber auch nicht besonders ressourcenschonend, fürchte ich.

[edit] Ist das Syntax-Highlighting neuderdings abgeschaltet? [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Textdatei-Einträge rückwärts speichern

  Alt 2. Nov 2008, 18:35
Zitat von mkinzler:
Beim Schreiben nicht, aber beim Anzeigen der Logdatei
Hatte ich auch schon überlegt, konnte aber noch nicht wirklich den Aufwand zum Nutzen einschätzen.

Zitat von thkerkmann:
Lass doch einfach für jeden Tag ein eigenes Logfile erstellen:
... dann ist es schön klein, sortiert sich im Explorer gut, und du kannst alte logs bei Bedarf löschen.
Das würde jede Menge Durcheinander und nun nicht wirklich einen Vorteil bringen. Mein Logfile umfast nun ca 360 Einträge von etwa einem Jahr. Das würden dann 360 Logfiles werden. Löschen will ich eigentlich nicht, ich find's gut, einen "Jahresüberblick" zu haben. In meinem einzelnen Logfile ergibt das gerade mal eine Größe von 28 KB.

Beim Sortieren müsse ich dann im Explorer die Spaltenüberschrift anklicken, was in etwa dem derzeitigen Aufwand entspricht, bei dem ich im Logfile die Tastenkombi Strg+Ende drücke. Also nicht wirklich ein Vorteil. Dennoch eine interessante Idee!


@Union und DeddyH
Die Ideen mit Stringlist und Stream sind vom Prinzip her genauso wie meine Idee mit den zwei Dateien, aber tatsächlich eleganter!

Die werde ich ins Auge fassen. Klingt sehr gut!

Was das Performate angeht, bei einer Logfile-Größe von knapp 30 KB nach einem Jahr denke ich, dass die Performance vertretbar ist. Werd ich mal ausprobieren. Winziger Wehrmutstropfen: Die Steuerung der Backups und das Schreiben des Logfiles wird nicht mit Delphi-Code erledigt, sondern mit AutoIt-Code. Mal sehen, was da möglich ist.

Ansonsten vielen Dank an alle!


PS @Union:

Ganz anderes Thema: Ich habe einen Code von dir übernommen und ein wenig aufgepeppt und in einer Unit gekapselt. Da muss ich mal dran denken, den der Community zur Verfügung zu stellen. An dieser Stelle danke für den Code!

Guido.
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Textdatei-Einträge rückwärts speichern

  Alt 7. Nov 2008, 23:59
Ok, habs nun in AutoIt umgesetzt (nur so, als Spielerei).

Das Prinzip von oben habe ich benutzt: Komplettes Logfile einlesen, Inhalt löschen, neuen Eintrag schreiben und zum Schluss den kompletten alten Inhalt hinzufügen.

Dank an alle Mitwirkenden!

Guido.
  Mit Zitat antworten Zitat
aladin60

Registriert seit: 12. Mär 2008
Ort: Sachsen-Anhalt
45 Beiträge
 
Delphi 2006 Personal
 
#8

Re: Textdatei-Einträge rückwärts speichern

  Alt 8. Nov 2008, 18:33
Logfile in Stringlist einlesen, mit Insert an Position 0 Zeile mit dem Eintrag einfügen und wieder in Datei speichern.

Bernd.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Textdatei-Einträge rückwärts speichern

  Alt 8. Nov 2008, 18:34
Das stand schon in #4
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
aladin60

Registriert seit: 12. Mär 2008
Ort: Sachsen-Anhalt
45 Beiträge
 
Delphi 2006 Personal
 
#10

Re: Textdatei-Einträge rückwärts speichern

  Alt 8. Nov 2008, 18:42
Sorry, nur kurz überlesen...

Bernd.
  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 01:27 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