Hallo nochmal, ne zweite Frage für mein Projekt.
ich schreibe gerade ein Programm für ein Logfile. Dieses speichert alle paar Minuten einen String.
Die neuen Daten sollen an die vorhandenen angehängt werden.
Um eine einstellbare Uhrzeit z.B. jede Nacht um 3:00 soll die alte Datei bleiben wie sie ist
und das Schreiben soll in eine neue Datei erfolgen.
Ich hab jetzt mit der Zeitfunktion ein Problemchen.
Wie kann ich eine Procedure einmalig aufrufen wenn eine bestimmte Uhrzeit erreicht ist.
Ein regelmäßiger Vergleich mit 3:00 wäre mehrfach gültig, wenn ichs auf die Sekunde genau mache,
krieg ichs nicht immer mit wenn mein Timer nicht genau da zuschlägt.
Ich stehe da irgendwie auf dem Schlauch. Das geht bestimmt ganz easy, aber wie?
Großer Dank für einen kleinen Tipp
Gruß
NoCee
"gelöst" neue Textdatei nach bestimmter Uhrzeit
-
- Beiträge: 174
- Registriert: Do 3. Mär 2011, 21:34
- OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
- CPU-Target: Intel 32/64Bit, ARM9
- Wohnort: Ulm
"gelöst" neue Textdatei nach bestimmter Uhrzeit
Zuletzt geändert von NoCee am Mi 3. Feb 2016, 08:11, insgesamt 1-mal geändert.
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: neue Textdatei nach bestimmter Uhrzeit
Wie unterscheiden sich denn die Dateien "vor 3 Uhr" und "nach 3 Uhr"? Du könntest auch immer in die gleiche Datei schreiben und die alte einfach umbenennen.NoCee hat geschrieben:Ich stehe da irgendwie auf dem Schlauch. Das geht bestimmt ganz easy, aber wie?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: neue Textdatei nach bestimmter Uhrzeit
Hi,
kannst du nicht einfach einen kleinen "Rahmen" nehmen ?
Nicht 03:00 sondern zwischen 03:00 und 03:05 .... oder so ähnlich ??
Oder bau dir 'ne boolean-VARIABLE oder so etwas in der Richtung...
kannst du nicht einfach einen kleinen "Rahmen" nehmen ?
Nicht 03:00 sondern zwischen 03:00 und 03:05 .... oder so ähnlich ??
Oder bau dir 'ne boolean-VARIABLE oder so etwas in der Richtung...
Re: neue Textdatei nach bestimmter Uhrzeit
Code: Alles auswählen
var
DateiErneuert: Boolean = false;
DateiNummer: Integer = 0;
function GetDateiname(Nr: Integer): String;
begin
Result := 'logfile-' + IntToStr(Nr) + '.txt';
end;
procedure LogMsg(AText: String);
var
DreiUhr: TTime;
F: TextFile;
begin
DreiUhr := EncodeTime(3, 0, 0, 0);
if (now > DreiUhr) and (not DateiErneuert) then begin
// Wegen des DateiErneuert wird dies nur 1x nach 3:00 ausgeführt.
inc(Dateinummer);
AssignFile(F, GetDateiName(Dateinummer));
Rewrite(F);
WriteLn(AText);
CloseFile(F);
DateiErneuert := true;
exit;
end;
AssignFile(F, GetDateiName(Dateinummer));
Append(F);
WriteLn(AText);
CloseFile(F);
DateiErneuert := false;
end;
-
- Beiträge: 174
- Registriert: Do 3. Mär 2011, 21:34
- OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
- CPU-Target: Intel 32/64Bit, ARM9
- Wohnort: Ulm
Re: neue Textdatei nach bestimmter Uhrzeit
War mir doch klar, daß das eigentlich einfach sein muß.
Ich hab aber immer nur versucht das mit Berechnungen zu lösen.
Das ich mir nur merken muß das die Datei schon gewechselt hat
hab ich aber erst geschnallt als ich DateiErneuert := true gelesen habe.
Wie ichs machen muß weis ich jetzt.
Ich muß aber gestehen, daß ich das Beispiel von wp_xyz nicht ganz verstehe.
Das müßte ich wenn ich das richtig verstehe mit einem Timer alle paar Minuten (oder h)
aufrufen. Beim ersten Aufruf nach 3:00 wechselt es die Datei und springt raus (exit).
Beim zweiten Aufruf wird DateiErneuert wieder auf false gesetzt.
Beim dritten Aufruf wäre es dann aber immer noch nach 3:00 so daß das nochmal ausgeführt würde.
Wenn ich das Bit erst wieder auf 0 setze wenn now kleiner 3:00 ist, hätte ichs durchschaut.
Hab ich da irgendwo einen Denkfehler?
Danke für die Antworten.
Der Programmschnipsel ist fast genau das was ich vorhabe.
Schönen Abend wünsche ich
NoCee
Ich hab aber immer nur versucht das mit Berechnungen zu lösen.
Das ich mir nur merken muß das die Datei schon gewechselt hat
hab ich aber erst geschnallt als ich DateiErneuert := true gelesen habe.
Wie ichs machen muß weis ich jetzt.
Ich muß aber gestehen, daß ich das Beispiel von wp_xyz nicht ganz verstehe.
Das müßte ich wenn ich das richtig verstehe mit einem Timer alle paar Minuten (oder h)
aufrufen. Beim ersten Aufruf nach 3:00 wechselt es die Datei und springt raus (exit).
Beim zweiten Aufruf wird DateiErneuert wieder auf false gesetzt.
Beim dritten Aufruf wäre es dann aber immer noch nach 3:00 so daß das nochmal ausgeführt würde.
Wenn ich das Bit erst wieder auf 0 setze wenn now kleiner 3:00 ist, hätte ichs durchschaut.
Hab ich da irgendwo einen Denkfehler?
Danke für die Antworten.
Der Programmschnipsel ist fast genau das was ich vorhabe.
Schönen Abend wünsche ich
NoCee
Re: neue Textdatei nach bestimmter Uhrzeit
Hast Recht, das war Mist, so geht's wenn man Code nicht testet.
Ich denke, vor das "DateiErneuert :=false" am Ende gehört die Bedingung "If now > DreiUhr then DateiErneuert := false". Damit wird das Flag erst nach 3:00 zurückgesetzt; die erste Meldung nach 3:00 geht damit noch in die alte Datei. Bei der nächsten Speicherung ist DateiErneuert nicht mehr true und der obere Teil wird angesprungen, bei dem die neue Datei angelegt wird. Falls bereits die erste Messung nach 3:00 in die neue Datei soll, müsstest du den Abfragezeitpunkt entsprechend vorverlegen.
Nein, du musst das nicht mit einem Timer aufrufen. Immer wenn du aus irgendwelchen Gründen die Routine aufrufst, wird mit now the aktuelle Uhrzeit bestimmt und mit dem Umschaltzeitpunkt verglichen.
Ich denke, vor das "DateiErneuert :=false" am Ende gehört die Bedingung "If now > DreiUhr then DateiErneuert := false". Damit wird das Flag erst nach 3:00 zurückgesetzt; die erste Meldung nach 3:00 geht damit noch in die alte Datei. Bei der nächsten Speicherung ist DateiErneuert nicht mehr true und der obere Teil wird angesprungen, bei dem die neue Datei angelegt wird. Falls bereits die erste Messung nach 3:00 in die neue Datei soll, müsstest du den Abfragezeitpunkt entsprechend vorverlegen.
Nein, du musst das nicht mit einem Timer aufrufen. Immer wenn du aus irgendwelchen Gründen die Routine aufrufst, wird mit now the aktuelle Uhrzeit bestimmt und mit dem Umschaltzeitpunkt verglichen.
-
- Beiträge: 174
- Registriert: Do 3. Mär 2011, 21:34
- OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
- CPU-Target: Intel 32/64Bit, ARM9
- Wohnort: Ulm
Re: neue Textdatei nach bestimmter Uhrzeit
Prima,
dann paßt zwar der Code nicht ganz, ich hab aber gleich kapiert
was du gemeint hast.
vielen Dank noch mal
Gruß
NoCee
[Edit]
für andere Nichtprofis die das hier finden:
if (now > DreiUhr) and (not DateiErneuert) then begin
funktioniert mit now so nicht. Hier ist immer das Datum mit Uhrzeit enthalten
und das ist immer größer als eine Uhrzeit.
mit frac(now) > ... gehts
dann paßt zwar der Code nicht ganz, ich hab aber gleich kapiert
was du gemeint hast.
vielen Dank noch mal
Gruß
NoCee
[Edit]
für andere Nichtprofis die das hier finden:
if (now > DreiUhr) and (not DateiErneuert) then begin
funktioniert mit now so nicht. Hier ist immer das Datum mit Uhrzeit enthalten
und das ist immer größer als eine Uhrzeit.
mit frac(now) > ... gehts