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.