AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Nicht eindeutige Dateinamen zueinander zuordnen
Thema durchsuchen
Ansicht
Themen-Optionen

Nicht eindeutige Dateinamen zueinander zuordnen

Ein Thema von Rülps · begonnen am 26. Aug 2015 · letzter Beitrag vom 31. Aug 2015
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.157 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 27. Aug 2015, 12:51
Wie ist den das kleinste Interval für die Erstellung?
Abstände zwischen Events sind aus technischen Gründen immer mindestens 30 Sekunden voneinander entfernt.
Und sieh da schon hast Du Dir die Antwort selber gegeben... Ich gehe mal davon aus, dass Du die Datei nicht selber erzeugst...

Ansonsten...

if Datei gefunden... then
Finde 2 Dateien die maximal +/- 29 Sekunden vor oder nach dieser Datei erzeugt wurden...

Fertig... Ohne Viel bla bla...
  Mit Zitat antworten Zitat
Rülps

Registriert seit: 26. Sep 2008
38 Beiträge
 
#2

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 27. Aug 2015, 15:29
Wie ist den das kleinste Interval für die Erstellung?
Abstände zwischen Events sind aus technischen Gründen immer mindestens 30 Sekunden voneinander entfernt.
Und sieh da schon hast Du Dir die Antwort selber gegeben... Ich gehe mal davon aus, dass Du die Datei nicht selber erzeugst...

Ansonsten...

if Datei gefunden... then
Finde 2 Dateien die maximal +/- 29 Sekunden vor oder nach dieser Datei erzeugt wurden...

Fertig... Ohne Viel bla bla...
Was mir an dieser Methode etwas stinkt ist, dass theoretisch eine Datei beispielsweise am 23.12.2014 um 23:59:59 erstellt werden könnte und die anderen beiden eine Sekunde später, d.h. ich muss um wirklich sicherzugehen sogar den Kalender des entsprechenden Jahres mitberücksichtigen, um Schaltjahre auszuschließen, um den richtigen Dateinamen zu identifizieren. Mir graust's vor der Bastelei...
Hmm, um das jetzt innerhalb der Datenbank zu lösen muss ich eine Menge umschreiben, aber ich schau mal, ob das eine befriedigende Lösung gibt.
*Doppel-Rülps*
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.784 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 27. Aug 2015, 15:43
.. da Du die Datensätze täglich bekommst/abholst sollte das mit dem Schaltjahr, Monatsende etc.
nicht eine so große Rolle spielen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 27. Aug 2015, 15:57
Also bei dem ca. 30 Sekundenintervall sehe ich in der Umwandlung der Datums- und Zeitangaben aus dem Dateinamen in einen TDateTime die sicherste Möglichkeit der Zuordnung von drei Dateien.

Schaltjahr... ist dann egal, es müssen immer in einem Zeitintervall von ca. 2 Sekunden drei Dateien zu finden sein (die über den Dateinamen bzw. die Dateiendung noch eindeutig klassifiziert werden können), ansonsten stimmt (ausgehend von Deinen Vorgaben) irgendetwas nicht.

Du könntest Datum und Uhrzeit auch in die Form YYYYMMDDHHMMSS bringen, dann kannst Du auch über Zeichenfolgen sortieren und bekommst die zusammengehörenden Dateien hintereinander, Plausibilität wie oben.

Ausgehend davon das 1 = 1 Tag ist, ist eine Sekunde (ca.) 1,1574074074074074074074074074074e-5
(= 1 / 24 / 60 / 60)

Drei Dateien sind also in einem Zeitfenster von 2 * 1,1574074074074074074074074074074e-5 zu suchen und zwei Dateisätze liegen ca. 30 * 1,1574074074074074074074074074074e-5 auseinander.
Derartige Berechnungen gehen mit TDateTime ganz einfach, das ist nur ein bisserl Mathematik mit ein Größe-/Kleinervergleichen.

Dies erscheint mir deutlich einfacher, als irgendwie über Zeichenfolgenvergleiche in den Dateinamen zu einer Zuordnung zu kommen.
  Mit Zitat antworten Zitat
Rülps

Registriert seit: 26. Sep 2008
38 Beiträge
 
#5

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 27. Aug 2015, 16:26
Also bei dem ca. 30 Sekundenintervall sehe ich in der Umwandlung der Datums- und Zeitangaben aus dem Dateinamen in einen TDateTime die sicherste Möglichkeit der Zuordnung von drei Dateien.

Schaltjahr... ist dann egal, es müssen immer in einem Zeitintervall von ca. 2 Sekunden drei Dateien zu finden sein (die über den Dateinamen bzw. die Dateiendung noch eindeutig klassifiziert werden können), ansonsten stimmt (ausgehend von Deinen Vorgaben) irgendetwas nicht.

Du könntest Datum und Uhrzeit auch in die Form YYYYMMDDHHMMSS bringen, dann kannst Du auch über Zeichenfolgen sortieren und bekommst die zusammengehörenden Dateien hintereinander, Plausibilität wie oben.

Ausgehend davon das 1 = 1 Tag ist, ist eine Sekunde (ca.) 1,1574074074074074074074074074074e-5
(= 1 / 24 / 60 / 60)

Drei Dateien sind also in einem Zeitfenster von 2 * 1,1574074074074074074074074074074e-5 zu suchen und zwei Dateisätze liegen ca. 30 * 1,1574074074074074074074074074074e-5 auseinander.
Derartige Berechnungen gehen mit TDateTime ganz einfach, das ist nur ein bisserl Mathematik mit ein Größe-/Kleinervergleichen.

Dies erscheint mir deutlich einfacher, als irgendwie über Zeichenfolgenvergleiche in den Dateinamen zu einer Zuordnung zu kommen.
Thx nahpets, an TDateTime hatte ich gar nicht gedacht Ich hab' die Datums- und Zeitstempel immer als String mitgeführt und ging davon aus, dass ich alles selber programmieren muss. Ja, ich denke so werde ich vorgehen!
*Doppel-Rülps*
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.157 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 27. Aug 2015, 19:52
Ausgehend davon das 1 = 1 Tag ist, ist eine Sekunde (ca.) 1,1574074074074074074074074074074e-5
(= 1 / 24 / 60 / 60)

Drei Dateien sind also in einem Zeitfenster von 2 * 1,1574074074074074074074074074074e-5 zu suchen und zwei Dateisätze liegen ca. 30 * 1,1574074074074074074074074074074e-5 auseinander.
Derartige Berechnungen gehen mit TDateTime ganz einfach, das ist nur ein bisserl Mathematik mit ein Größe-/Kleinervergleichen.
Ernsthaft?

Wie wäre es mit SecondsBetween(A,B) < 30
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 28. Aug 2015, 11:25
Ausgehend davon das 1 = 1 Tag ist, ist eine Sekunde (ca.) 1,1574074074074074074074074074074e-5
(= 1 / 24 / 60 / 60)

Drei Dateien sind also in einem Zeitfenster von 2 * 1,1574074074074074074074074074074e-5 zu suchen und zwei Dateisätze liegen ca. 30 * 1,1574074074074074074074074074074e-5 auseinander.
Derartige Berechnungen gehen mit TDateTime ganz einfach, das ist nur ein bisserl Mathematik mit ein Größe-/Kleinervergleichen.
Ernsthaft?

Wie wäre es mit SecondsBetween(A,B) < 30
Wieso nicht ernsthaft, was macht denn SecondsBetween? Es ermittelt bei zwei TDateTime das Zeitfenster und mit < 30 wird letztlich geprüft, ob dieses eben kleiner ca. 30 * 1,1574074074074074074074074074074e-5 ist.

Um auf < 30 zu prüfen, muss irgendwo im Inneren von SecondsBetween ja aus den beiden Floatwerten, die die TDateTimes nun mal sind, die Differenz in Sekunden berechnet werden. Wer jetzt wann, was wie umrechnet, ist eigentlich egal, es geht letztendlich "nur" um Mathematik.

Hier im konkreten Fall dürfte es sinnvoll sein, zuerst festzustellen, welche der drei Dateien vom "Herstellungsprozess" zuletzt geschrieben wird.
Nur nach diesen Dateien würde ich suchen. Aus deren Dateinamen lässt sich der Dateiname der anderen Dateien ableiten und mit FileExists prüfen, ob diese Dateien vorhanden sind.
Die zugehörigen Dateien müssen in einem Zeitfenster von etwa 1 bis 2 Sekunden gefunden werden. Durch entsprechende Manipulation der Dateinamen (also Dateinamensteile in TDateTime umwandeln, minus 1 Sekunde und zurück in Dateinamen umwandeln) kann mit FileExists auf diese beiden Dateien geprüft werden. (Zur Sicherheit eventuell bei Misserfolg auf dem gleichen Weg noch eine Sekunde abziehen und erneut prüfen.) Fehlt eine der Dateien, so ist was faul.
Der Zeitabstand zwischen der Erstellung der jeweils zuletzt erstellten Dateien dieser Tripels, ist dabei dann schon fast irrelevant.

Liegt die Zeitdifferenz zwischen zweien der zuletzt erstellten Dateien oberhalb des Prozessintervals des "Herstellungsprozesses", so kann man hierüber ebenfalls feststellen, ob die Tripels vollständig vorhanden sind oder eben nicht. Das SecondsBetween müsste hier also between ca. 25 and 35 Seconds liegen.
Also eher einif SecondsBetween(A,B) in [25..35] then ok else nicht_ok; Ein stures < 30 ist da (vermutlich) zu starr. Aber hier kann man nur spekulieren, man müsste mehr Informationen zum genauen Prozessablauf haben, um genauere Vorschläge für die Zeitangaben machen zu können.

Das es das SecondsBetween gibt ist für diese Ausgabenstellung zwar ganz nett, aber eigentlich nicht erforderlich.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.157 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 28. Aug 2015, 12:49
Das SecondsBetween müsste hier also between ca. 25 and 35 Seconds liegen.
natürlich nicht...

SecondsBetween wird sicherlich bei 1-3 liegen...

Es geht ja nur darum die Datei zu finden die zum gleichen Zeitpunkt erstellt worden ist... mit der 1-3 Sekunden Verzögerung. Da das Intervall der Erzeugung bei 30 Sekunden liegt, bis wieder 3 Dateien kommen war <30 GENAU richtig!
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 28. Aug 2015, 13:56
Das SecondsBetween müsste hier also between ca. 25 and 35 Seconds liegen.
natürlich nicht...

SecondsBetween wird sicherlich bei 1-3 liegen...

Es geht ja nur darum die Datei zu finden die zum gleichen Zeitpunkt erstellt worden ist... mit der 1-3 Sekunden Verzögerung. Da das Intervall der Erzeugung bei 30 Sekunden liegt, bis wieder 3 Dateien kommen war <30 GENAU richtig!
Zitat von Rülps:
Abstände zwischen Events sind aus technischen Gründen immer mindestens 30 Sekunden voneinander entfernt.
von daher kann < 30 richtig sein, muss es aber nicht.

< 30 kann richtig sein, wenn es um die Zeitdifferenz von drei zueinander gehörenden Dateien geht. Es ist aber falsch, wenn es um den Zeitabstand von jeweils zwei Dateitripeln geht, hier müsste es dann >= 30 heißen.

Ob 30 Sekunden richtig oder falsch sind, kommt auf den Standpunkt an.

Daraus resultierte mein Vorschlag, nur die jeweils zuletzt erstellte Datei (anhand des Dateinamenmusters) zu suchen und die zugehörigen Dateien zuerst zum gleichen Zeitpunkt zu erwarten und wenn nicht gefunden nochmal mit einer Zeitdifferenz von einer, bei weiterem Misserfolg einer weiteren, Sekunde zu suchen.

Dateizeit sei also 10_00_03.
Erste Versuch mit 10_00_03.
zweiter Versuch mit 10_00_02
dritter Versuch mit 10_00_01
und schon haben wir
Zitat von Mavarik:
SecondsBetween wird sicherlich bei 1-3 liegen...
für das Dateitripel.

Die Zeit zwischen zwei Dateitripeln sollte (s. o.) größer oder gleich 30 sein.
Da ich halt nicht so recht weiß, wie genau die Zeitvergabe bei den einzelnen Dateien ist, hatte ich als "Toleranzgrenze" halt mal als Beispiel 5 Sekunden angenommen.

Frei nach dem Motto: Wenn zwei Dateitripel mehr oder weniger als 25 bis 35 Sekunden auseinander liegen, dann stimmt höchstwahrscheinlich etwas nicht. Für genaue Angaben muss man das System halt besser kennen oder weitere Informationen bekommen. Aber vermutlich ist das Problem längst gelöst und eine Diskussion über SecondsBetween 1..3 oder SecondsBetween 25..35, jenachdem welches Problem man nun löst (Konsitenz innerhalb eines Dateitripels oder zwischen zwei Dateitripeln), nicht weiter von Belang.
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz