![]() |
Nicht eindeutige Dateinamen zueinander zuordnen
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:
"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:
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
Delphi-Quellcode:
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? :thumb:
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 |
AW: Nicht eindeutige Dateinamen zueinander zuordnen
Wie ist den das kleinste Interval für die Erstellung?
|
AW: Nicht eindeutige Dateinamen zueinander zuordnen
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? |
AW: Nicht eindeutige Dateinamen zueinander zuordnen
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 |
AW: Nicht eindeutige Dateinamen zueinander zuordnen
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:
Nun teilst Du Dir beim Befüllen der Tabelle den Dateinamen auf:
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
Delphi-Quellcode:
Wenn Du nun den Inhalt der Datenbank per
// 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;
Code:
liest, sollten immer die drei zusammengehörenden Sätze hintereinander liegen.
select Dateiname from tabelle order by zeit, datum, dateinamen
Ü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:
Was gehört jetzt zusammen?
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 Wie oben schon mal kommentiert: Zitat:
|
AW: Nicht eindeutige Dateinamen zueinander zuordnen
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. 8-)
|
AW: Nicht eindeutige Dateinamen zueinander zuordnen
@scrat1979 :thumb:
(sehe gerade, stahli hat das auch schon vorgeschlagen) :thumb: Alles andere ist doch Unfug - einen wie auch immer gearteten Algorithmus zu finden, der den Fehler, den man selber verbockt hat im Nachgang wieder ausbügelt. |
AW: Nicht eindeutige Dateinamen zueinander zuordnen
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Thx für die zahlreichen Antworten. |
AW: Nicht eindeutige Dateinamen zueinander zuordnen
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. |
AW: Nicht eindeutige Dateinamen zueinander zuordnen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 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