Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#22

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