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
Seite 1 von 2  1 2      
Rülps

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

Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 26. Aug 2015, 17:25
Hallo liebe Leutz, ich weiß der Titel klingt komisch, aber ich versuch mal mein Problem zu erläutern. Ich habe einen Riesensatz von Textdateien. Jeweils drei dieser Textdateien werden pro Event automatisch generiert und zwar im folgenden Format:
Delphi-Quellcode:
G1-01_05_2014 00_10_57.csv
G1-01_05_2014 00_10_57.txt
G1-SC status-01_05_2014 00_10_57.txt
"01_05_2014 00_10_57" ist für jede Datei der entsprechende Datums- bzw. Zeitstempel. Das Problem ist aber, dass sich die Zeitstempel der Dateien bei der Erstellung um 1 Sekunde unterscheiden können. Also sehen geschätzte 7% der Dateien so oder so ähnlich aus:
Delphi-Quellcode:
G1-01_05_2014 00_10_56.csv
G1-01_05_2014 00_10_57.txt
G1-SC status-01_05_2014 00_10_57.txt

G1-01_05_2014 00_27_53.csv
G1-01_05_2014 00_27_53.txt
G1-SC status-01_05_2014 00_27_52.txt
Ich lade alle Dateien in eine StringList und parse die Infos aus den drei zusammenhängenden Dateien heraus und schreibe sie in eine Datenbank. Ich finde keine Lösung wie ich die Dateien zueinander zuordnen kann, wenn sie sich im Zeitstempel unterscheiden. Weiß jemand eine Methode?
*Doppel-Rülps*
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 26. Aug 2015, 17:37
Wie ist den das kleinste Interval für die Erstellung?
  Mit Zitat antworten Zitat
Rülps

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

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 26. Aug 2015, 19:13
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.
Da wären ein paar mehr Infos hilfreich.

1. Nachfrage:
Erzeugst Du die Dateien selbst oder sind die von dritter Seite gegeben?
Vielleicht lässt sich der Zeitstempel ja vereinheitlichen:
TS := Now; ... und dann überall TS verwenden.
Nur mal vorab, eh man komplexere Lösungen sucht.

Zur Sortierung wäre (wenn das nicht fix ist) evtl. auch ein anderes Dateinamenformat zu überlegen: yyyymmddhhnnsszzz-irgendwas.xyz

Welche Abstände haben denn die Zeitstempel? Mindestens einige Sekunden oder auch mal sehr wenig?
Dateinamen kann ich leider nicht beeinflussen. Das mit dem Sortieren hab ich mir auch schon überlegt. Mal schauen... Abstände siehe oben
hallo,

du möchtest Daten an hand eines Zeitstempels eindeutig zuordnen, das Problem hatte ich vor Jahren auch mal...

Nein, wir suchen eine andere Lösung.

mfg
Die Antwort verstehe ich nicht ganz. Sucht ihr immer noch nach einer Lösung?
Hallo,

mache mal 'nen blöden Vorschlag:

Da Du ja schon eine Datenbank hast, lies Dir die Dateinamen in eine eigene Tabelle ein.

Die Tabelle bekommt eine Spalte für den Dateinamen und weitere Spalten für Datum und Uhrzeit.
Code:
G1-01_05_2014 00_10_57.csv
G1-01_05_2014 00_10_57.txt
G1-SC status-01_05_2014 00_10_57.txt
Nun teilst Du Dir beim Befüllen der Tabelle den Dateinamen auf:
Delphi-Quellcode:
// Nur hingedaddelt, nicht getestet.
procedure TuEsInDieDatenbank(sDateiname : String);
Var
  sDatum : String;
  sZeit : String;
  iPos : Integer;
begin
  sDatum := ChangeFileExt(sDateiname,'');
  sDatum := AnsiReplaceText(sDatum,'SC status-','');
  iPos := Pos('-',sDatum) + 1;
  sDatum := Copy(sDatum,iPos,Length(sDatum));
  iPos := Pos(' ',sDatum);
  sZeit := Copy(sDatum,iPos + 1,Length(sDatum));
  sDatum := Copy(sDatum,1,iPos - 1);
  sDatum := AnsiReplaceText(sDatum,'_','.');
  sZeit := AnsiReplaceText(sZeit,'_',':');
  tabelle.append;
  tabelle.FieldByName('dateiname').AsString := sDateiname;
  tabelle.FieldByName('datum').AsDateTime := StrToDate(sDatum);
  tabelle.FieldByName('zeit').AsDateTime := StrToTime(sZeit);
  // Müsste eigentlich auch gehen.
  tabelle.FieldByName('Zeitstempel').AsDateTime := StrToDateTime(sDatum + ' ' + sZeit);
  tabelle.Post;
end;
Wenn Du nun den Inhalt der Datenbank per
Code:
select Dateiname from tabelle order by zeit, datum, dateinamen
liest, sollten immer die drei zusammengehörenden Sätze hintereinander liegen.
Über den Dateinamen kannst Du ja dann ausmachen, um welchen Dateityp es sich handelt, um die weitere Verarbeitung zu steuern.

Aber: Ich gehe nicht davon aus, dass das in 100% der Fälle so funktioniert.
Wenn die Dateien in kurzen Zeitabständen erstellt werden, kann es immernoch zu Problemen bei der Zuordnung kommen.
Code:
G1-01_05_2014 00_10_56.csv
G1-01_05_2014 00_10_57.txt
G1-SC status-01_05_2014 00_10_57.txt
G1-01_05_2014 00_10_57.csv
G1-01_05_2014 00_10_58.txt
G1-SC status-01_05_2014 00_10_58.txt
Was gehört jetzt zusammen?

Wie oben schon mal kommentiert:
Zitat von frankyboy1974:
Nein, wir suchen eine andere Lösung.
Wenn irgendmöglich ist diese Alternative vorzuziehen!
Also die Dateien enthalten zum selben Event verschiedene Infos - ist schon schlecht by Design. Also z.B. Datei 1 enthält (ironischerweise) ebanfalls Uhrzeit und Datum und Kundennamen als Info. Datei 2 nähere Infos zum Event. Datei 3 enthält debuggingmäßige Infos und Versionsinfos bzgl. der Software, welches die Events erstellt. Diese sollen je Event zeilenweise in eine Tabelle geschrieben werden. Also ein Event entspricht einer Zeile.
Vielleicht habe ich auch die Aufgabenstellung falsch verstanden, aber so weit ich es verstanden habe werden die drei zusammengehörenden Dateien in einem Event erstellt. Warum speicherst du nicht zu Beginn des Events den aktuellen Zeitstempel in einer Variable ab und verwendest diese um die Dateinamen zu erstellen? Dann wäre doch die Basis für alle drei Dateien derselbe Zeitstempel - egal ob die Dateien auch "länger" nacheinander erstellt werden.
Die Dateien werden von einer (relativ alten) auf UNIX basierenden Low Level Hardware/Software "Architektur" automatisch erstellt und nur täglich zu uns rübergeschickt. Ich habe keinen Einfluss auf die Erstellung und kann auch nicht Livemonitoring betreiben und mit 100%iger Sicherheit kann ich sagen, dass kein Geld in die Hand genommen wird, um dieses System upzudaten.

Thx für die zahlreichen Antworten.
*Doppel-Rülps*
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#4

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 26. Aug 2015, 19:22
Hallo..

Frage:
Welche von den 3 Dateien wird als letztes erzeugt?

Wenn es die G1-SC status.. ist, kannste Dir doch die anderen Dateinamen mit alternative Zeitstempel selber davon ableiten und einfach mit FileExists prüfen..

Du brauchst dann auch nur Dateien Prüfen, welche die gleiche Zeit oder um 1 / 2 Sekunden kleineren Zeitanteil haben.
  Mit Zitat antworten Zitat
Rülps

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

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 26. Aug 2015, 19:28
Hallo..

Frage:
Welche von den 3 Dateien wird als letztes erzeugt?

Wenn es die G1-SC status.. ist, kannste Dir doch die anderen Dateinamen mit alternative Zeitstempel selber davon ableiten und einfach mit FileExists prüfen..

Du brauchst dann auch nur Dateien Prüfen, welche die gleiche Zeit oder um 1 / 2 Sekunden kleineren Zeitanteil haben.
Genau so mache ich das auch bisher - also mit FileExists überprüfen. Nur das mit dem Zeitteil nochmal anpassen ist irgendwie unschön und umständlich. Ich muss es aber dann auf diesem Wege machen, wenn es keine andere Lösung gibt.
*Doppel-Rülps*
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Nicht eindeutige Dateinamen zueinander zuordnen

  Alt 26. Aug 2015, 20:55
Ist doch alles ganz einfach: Wenn die Einträge in der DB nach Datum sortiert sind, hast du doch schon alle beisammen. Die ersten drei gehören zusammen, die nächsten drei gehören zusammen usw. Und das Datum aus dem Filenamen zu ermitteln, dürfte wohl die leichteste Übung sein ...
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

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
 
#8

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.780 Beiträge
 
Delphi 10.4 Sydney
 
#9

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
 
#10

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
Antwort Antwort
Seite 1 von 2  1 2      


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 05:25 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