AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Für jeden Tag eine Datei erzeugen

Ein Thema von Mirco · begonnen am 7. Jun 2006 · letzter Beitrag vom 16. Jun 2006
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Mirco

Registriert seit: 7. Mai 2006
71 Beiträge
 
#1

Für jeden Tag eine Datei erzeugen

  Alt 7. Jun 2006, 13:15
Hallo

Ich habe ein Programm mit dem werden jeden Tag Daten in ein Memo eingetragen.
Alle Eingaben müssen am Ende eines Tages 24:00h in einer Datei gespeichert werden.
Wie kann ich dieses Memo jeden Tag automatisch speichern und die Datei mit einem Datum versehen.
Das Memo soll hinterher einfach geleert werden und eine neue Dtaei mit neuem Datum anlegen.

Mein Problem ist das überprüfen welcher Tag gerade ist und automatische anlegen einer Datei mit dem aktuellen Tagesdatum.
Es darf ja nicht in eine datei vom Vortag geschrieben werden.

Wer mag mir bei meinen Anfangsschwierigkeiten helfen?

Viele Grüsse Mirco
Mirco Hallenga
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: Für jeden Tag eine Datei erzeugen

  Alt 7. Jun 2006, 13:17
Hi!

Wenn dein Programm immer läuft (durchgehend) könnte ein Timer die Lösung sein.
Da du das aber nicht sicherstellen kannst, würde ich einfach überprüfen, ob es eine Datei mit dem aktuellen Datum schon gibt. Falls ja, brauchst du ja nichts zu machen. Falls nicht, neue Datei mit aktuellem Datum anlegen und Memo löschen...


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Für jeden Tag eine Datei erzeugen

  Alt 7. Jun 2006, 13:23
Delphi-Quellcode:
// globale Variable
Var OldFileName: String;

// OnCreate/Programmstart:
OldFileName := 'irgendwas' + DateToStr(Now) + '.txt';
If FileExists(OldFileName) Then Memo1.Lines.LoadFromFile(OldFileName);

// OnTimer (kannst ja im Minuten-, oder Sekundenintervall laufen lassen)
NewFileName := 'irgendwas' + DateToStr(Now) + '.txt';
If (NewFileName <> OldFileName) and not FileExists(NewFileName) Then Begin
  Memo1.Lines.SaveToFile(NewFileName);
  Memo1.Lines.Clear;
  OldFileName := NewFileName;
End;

// beim Programmbeenden
FileName := 'irgendwas' + DateToStr(Now) + '.txt';
Memo1.Lines.SaveToFile(FileName);
[add]
och menno, da war ja wer schneller

Na ja, eigentlich würde ja och sowas If NewFileName <> OldFileName Then Begin ausreichen, aber wenn wer an der Zeit spielt, dann könnte es zu problemen kommen und selbst wenn nicht .. ich sag nur Zeitumstellung.

LoadFromFile in onCreate eingefügt, falls das Programm am selben Tag mal beendet/neu gestartet wird.
Und den Abschnitt "beim Programmbeenden" angefügt, damit beim Programmende nichts verloren geht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Mirco

Registriert seit: 7. Mai 2006
71 Beiträge
 
#4

Re: Für jeden Tag eine Datei erzeugen

  Alt 7. Jun 2006, 13:29
Hi

ja das Programm muss immer laufen, aber falls es mal ausversehen
geschlossen wird, ist das überprüfen ob die Datei schon vorhanden ist eine gute Idee.

Danke für das Beispiel

Grüsse Mirco
Mirco Hallenga
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Für jeden Tag eine Datei erzeugen

  Alt 7. Jun 2006, 13:38
Zitat von Mirco:
Hi

aber falls es mal ausversehen
geschlossen wird, ist das überprüfen ob die Datei schon vorhanden ist eine gute Idee.
hatte noch was nachgetragen, vorallem was das vorzeitig beenden/neustarten betrifft.

Aber am Besten kommst du, wenn du eher einen DateToString-Variante nimst, woo du selber das Vormat angeben kannst, damit es auf allen Rechnern und mit vrschiedenen DateString-Versionen gleich läuft.

Oder halt selber machen ... am Besten macht es sich dabei Jahr-Monat-Tag zu schreiben, dann sind die Dateien im Explorer schön sortiert.


z.B.:
Delphi-Quellcode:
FileName := 'irgendwas' + DateToFormatString('yymmdd', Now); // oder wie du nötige Funktion heißt ._.

// oder
GetSystemTime(D);
FileName := 'irgendwas'
  + IntToStr((D.wYear div 10) mod 10) + IntToStr(D.wYear mod 10)
  + IntToStr(D.wMonth div 10) + IntToStr(D.wMonth mod 10)
  + IntToStr(D.wDay div 10) + IntToStr(D.wDay mod 10);

...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#6

Re: Für jeden Tag eine Datei erzeugen

  Alt 7. Jun 2006, 13:38
Zitat von himitsu:
DateToStr(Now)
Könnte zu Problemen führen, wenn der Benutzer das Datumsformat ändert.
Man könnte sich eine Funktion dafür schreiben (nur als einfaches Beispiel)
Delphi-Quellcode:
function GetMemoFileName(const ABaseName: string; ADateTime: TDateTime): string;
begin
  Result := ABaseName + '_' + FormatDateTime('yyyy-mm-dd', ADateTime) + '.txt';
end;
edit: hm, da fehlte wohl der rote Kasten
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Für jeden Tag eine Datei erzeugen

  Alt 7. Jun 2006, 13:46
joo, die RedBox fehlt hier och ständig ma

Das mit der Funktion ist och nicht schlecht, damit hat man nur noch eine Funktion, wo der Dateiname erstellt ... fals man also mal daran was ändert, kann man wenigstens nicht irgendwo vergessen etwas mitzuändern, als wenn es mehrfah dastehen würde ^^

Und jupp, das FormatDateTime meinte ich ... ich nehme wohl einfach zuviel "optimiertes" selbstgemachtes Zeugs.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Mirco

Registriert seit: 7. Mai 2006
71 Beiträge
 
#8

Re: Für jeden Tag eine Datei erzeugen

  Alt 7. Jun 2006, 13:55
Hallo....so viele Antworten.

Wie verwende ich den Code?
Muss ich vorher eine Datei anlegen?

Delphi-Quellcode:
function GetMemoFileName(const ABaseName: string; ADateTime: TDateTime): string;
begin
  Result := ABaseName + '_' + FormatDateTime('yyyy-mm-dd', ADateTime) + '.txt';
end;
Grüße
Mirco
Mirco Hallenga
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Für jeden Tag eine Datei erzeugen

  Alt 7. Jun 2006, 14:09
Einfach nur da eintragen, wo ein Dateiname erstellt wird.

Code:
// globale Variable
Var OldFileName: String;

// zusätzliche Funktionen:
[color=#ff001f]function GetMemoFileName(const ABaseName: string; ADateTime: TDateTime): string;
begin
  Result := ABaseName + '_' + FormatDateTime('yyyy-mm-dd', ADateTime) + '.txt';
end;[/color]

// OnCreate/Programmstart:
OldFileName := [color=#ff0000]GetMemoFileName[/color];
If FileExists(OldFileName) Then Memo1.Lines.LoadFromFile(OldFileName);

// OnTimer (kannst ja im Minuten-, oder Sekundenintervall laufen lassen)
NewFileName := [color=#ff0000]GetMemoFileName[/color];
If (NewFileName <> OldFileName) and not FileExists(NewFileName) Then Begin
  Memo1.Lines.SaveToFile(NewFileName);
  Memo1.Lines.Clear;
  OldFileName := NewFileName;
End;

// beim Programmbeenden
FileName := [color=#ff0000]GetMemoFileName[/color];
Memo1.Lines.SaveToFile(FileName);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Für jeden Tag eine Datei erzeugen

  Alt 7. Jun 2006, 14:53
Hi folks,

wollt ihr wirklich ständig in einem OnTimer-Event nachschauen, ob wer an der Uhr gedreht hat? Wenn die Logdatei in einem Memo mitgeschrieben wird, dann wird wohl nicht unbändig viel rein geschrieben. Ich würde dann beim Schreiben eines Eintrages prüfen, ob es wiedermal so weit ist.

Mit der angehängten Unit geht das so:

Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject)
begin
  self.Log := TLogStrings.Create(Memo.Lines, ParamStr(0));
end;

// ...
begin
  Log.AddLine('so long');
end;
Getippt und kaum getestet...

Freundliche Grüße vom marabu
Angehängte Dateien
Dateityp: zip logutils_170.zip (648 Bytes, 19x aufgerufen)
  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:04 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