"gelöst" neue Textdatei nach bestimmter Uhrzeit

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
NoCee
Beiträge: 170
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

Beitrag von NoCee »

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
Zuletzt geändert von NoCee am Mi 3. Feb 2016, 08:11, insgesamt 1-mal geändert.

Socke
Lazarusforum e. V.
Beiträge: 3158
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

Beitrag von Socke »

NoCee hat geschrieben:Ich stehe da irgendwie auf dem Schlauch. Das geht bestimmt ganz easy, aber wie?

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.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: neue Textdatei nach bestimmter Uhrzeit

Beitrag von SoE »

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...

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: neue Textdatei nach bestimmter Uhrzeit

Beitrag von wp_xyz »

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;

NoCee
Beiträge: 170
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

Beitrag von NoCee »

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

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: neue Textdatei nach bestimmter Uhrzeit

Beitrag von wp_xyz »

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.

NoCee
Beiträge: 170
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

Beitrag von NoCee »

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

Antworten