FormatDate mit Millisekunden?
FormatDate mit Millisekunden?
Hallo,
ich generiere mehrere Dateien über einen längeren Zeitraum und benenne
sie dann mittels aktuellem Datum und Zeit der Generierung.
FormatDate("%yyyy%mm%dd%hh%ii%ss", Date())
Generiert mir:
C:\temp\20041010123044.txt
C:\temp\20041010123045.txt
C:\temp\20041010123046.txt
Nun kann es vorkommen, daß in der selben Sekunde zwei oder mehr
Dateien geschrieben werden. Aus diesem Grund würde ich gerne noch die
Angabe der Millisekunden an den Dateinamen hängen.
C:\temp\2004101012304602.txt
C:\temp\2004101012304612.txt
C:\temp\2004101012304705.txt
Leider habe ich noch nicht gefunden, wie ich dieses bewerkstelligen könnte.
Any hints?
Danke im voraus & Grüße ... Kiffi
ich generiere mehrere Dateien über einen längeren Zeitraum und benenne
sie dann mittels aktuellem Datum und Zeit der Generierung.
FormatDate("%yyyy%mm%dd%hh%ii%ss", Date())
Generiert mir:
C:\temp\20041010123044.txt
C:\temp\20041010123045.txt
C:\temp\20041010123046.txt
Nun kann es vorkommen, daß in der selben Sekunde zwei oder mehr
Dateien geschrieben werden. Aus diesem Grund würde ich gerne noch die
Angabe der Millisekunden an den Dateinamen hängen.
C:\temp\2004101012304602.txt
C:\temp\2004101012304612.txt
C:\temp\2004101012304705.txt
Leider habe ich noch nicht gefunden, wie ich dieses bewerkstelligen könnte.
Any hints?
Danke im voraus & Grüße ... Kiffi
- remi_meier
- Beiträge: 1078
- Registriert: 29.08.2004 20:11
- Wohnort: Schweiz
Du könntest doch auch anstatt die Millisekunden hinzuschreiben einfach irgendwo eine globale strukturierte Variable machen, wo drinn steht, wieviele Dateien schon mit der aktuellen Zeit geschrieben worden sind. Dann kannst du eine Dateinummer dahinter schreiben.
Bsp.:
Structure
AnzDateien.l
AktZeit.l
EndStructure
Und jetzt einfach immer wenn die AktZeit mit der Aktuellen Zeit nicht mehr übereinstimmt, AnzDateien auf 0 setzten. Und wenn eine neue Datei in der gleichen Zeit erstellt wird, die AnzDateien + 1 rechnen!
greetz
remi
Bsp.:
Structure
AnzDateien.l
AktZeit.l
EndStructure
Und jetzt einfach immer wenn die AktZeit mit der Aktuellen Zeit nicht mehr übereinstimmt, AnzDateien auf 0 setzten. Und wenn eine neue Datei in der gleichen Zeit erstellt wird, die AnzDateien + 1 rechnen!
greetz
remi
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Am Anfang lässt rechnest du ein Offset für [c]ElapsedMilliseconds()[/c] aus, damit dies immer Null ist, wenn die Sekunden von [c]Date()[/c] umspringenund dann nimmst du immer folgenden Code zum Dateinamen generieren
Code: Alles auswählen
sek_old.l = Second(Date())
Repeat
Offset = ElapsedMilliseconds() % 1000
Until (Second(Date()) - sek_old + 60) % 60 = 1
Code: Alles auswählen
FormatDate("%yyyy%mm%dd%hh%ii%ss", Date()) + RSet(Str((ElapsedMilliseconds() - Offset) % 1000), 4, "0")
Hallo Kiffi,
Ist vielleicht nicht die beste Variante aber eventuell hilft es ja.
Ist vielleicht nicht die beste Variante aber eventuell hilft es ja.
Code: Alles auswählen
Global Millisekunden.f
Millisekunden.f = 0
Procedure Schreibe()
Millisekunden.f = Millisekunden.f +1
Debug FormatDate("%yyyy%mm%dd%hh%ii%ss",Date()) + Str(Millisekunden.f)
EndProcedure
Repeat
Schreibe()
Delay(100)
ForEver
End
- remi_meier
- Beiträge: 1078
- Registriert: 29.08.2004 20:11
- Wohnort: Schweiz
Ich weiss jetzt zwar nicht wie schnell solche Dateizugriffe sind, aber ich denke, dass es trotzdem noch vorkommen kann, dass 2 Dateien innerhalb von 10ms geschrieben werden können (Die Genauigkeit von ElapsedMilliseconds() ist ja etwa 10ms). Deshalb habe ich auch die kompliziertere Methode vorgeschlagen.
greetz
remi
EDIT: Smashs Beitrag hab ich übersehen. Der ist natürlich noch einfacher (nimm aber nicht Floats und setze Millisekunden auch mal wieder auf 0)!
greetz
remi
EDIT: Smashs Beitrag hab ich übersehen. Der ist natürlich noch einfacher (nimm aber nicht Floats und setze Millisekunden auch mal wieder auf 0)!
Zuletzt geändert von remi_meier am 10.10.2004 12:58, insgesamt 1-mal geändert.
- remi_meier
- Beiträge: 1078
- Registriert: 29.08.2004 20:11
- Wohnort: Schweiz
Mach ich _________ M$
Danke für die APIs
____________________________________________
@remi, Wieso keine Floats ?
Die hab ich benutzt weil sie angeblich unlimitiert sind.
Hab’s aber hier noch mal überarbeitet
Danke für die APIs
____________________________________________
@remi, Wieso keine Floats ?
Die hab ich benutzt weil sie angeblich unlimitiert sind.
Hab’s aber hier noch mal überarbeitet
Code: Alles auswählen
OpenWindow(0, 30, 200, 200, 20, #PB_Window_SystemMenu, "EXIT")
Global MilliNr.w : MilliNr.w = 0
Global Tick.s : Tick.s = "0"
Procedure Schreibe()
If FormatDate("%ss",Date()) <> Tick.s
Tick.s = FormatDate("%ss",Date())
MilliNr.w = 0
EndIf
Debug FormatDate("%yyyy%mm%dd%hh%ii%ss",Date()) +"-"+ Str(MilliNr.w)
MilliNr.w = MilliNr.w +1
EndProcedure
Repeat : Schreibe()
Select WindowEvent()
Case #PB_EventCloseWindow
End
EndSelect
;Delay(3)
ForEver
End