Autor |
Beitrag |
mega
      
Beiträge: 46
Win XP
D3 Prof
|
Verfasst: Fr 12.05.06 09:19
Hallo,
In einer Log-Datei sind Datum und Zeit gespeichert, z.B. so:
Date and Time: 04/19/06 23:12:28
Erkennbar wäre das am 'Date and Time:' und wenn man weiss, was danach wo steht.
Die Frage ist jetzt, ob man das etwas allgemeiner halten kann, damit der User es in einem Textfeld z.B. so eingeben kann: ' DD/NN/JJ HH:MM:SS' und delphi das dann auf mehrere Variablen oder gleich in TDateTime speichert.
Wo es anfängt lässt sich ja mit pos() von 'Date and Time:' ermitteln. Oder kann Delphi auch nach Mustern suchen (in der Windows-Suche würde das so aussehen: ' ??/??/?? ??:??:??')
? = beliebiges Zeichen, aber genau ein Zeichen.
Ich hab dazu noch function FormatDateTime(const Format: string; DateTime: TDateTime): string; gefunden. Das macht aus einem TDateTime einen Benutzerformatierten Strig. Gibts das auch andersrum? also TDateTime aus String und Format oder Einzelvariablen aus String und Format?
|
|
FFKangoroo
      
Beiträge: 33
WIN XP SP2
Delphi 7
|
Verfasst: Sa 13.05.06 11:38
Also wenn ich dich richtig verstehe, dann hast du eine logdatei die nicht nur aus dem jeweiligen Datum besteht sondern so ähnlich wie ein ICQ Log (Datum +Text) ist und du willst dann zu einem belibigen datum springen? oder möchtest du zum nächsten datum springen wo du nicht weisst welches es ist?
bei ersterem wäre es so dass du einfach die Eingabe strickt vorgibst und dann suchen lässt. kannste zum beispiel mit mehrern edits machen wo dann halt zum einen der Tag, der Monat und das Jahr usw. reingeschriben werden. sollte meiner meinung nach kein problem sein.
(hmm wer lesen kann ist klar im vorteil ...  )
beim zweiten kannst du vor das datum einfach eine Textmarke setzen wie: '?date?' (form ist ja egal hauptsache etwas was das nicht so im fliestext vorkommt) und lässt dann nacheinander die sachen suchen.
hmm was am kompliziertesten wäre wenn du dann zum beispiel nur nach dem monat suchen möchtest. hier wäre am einfachsten wenn du wirklich erstmal alles in einzelne editfelder aufteilst und vorher dann checkst ob sie leer und zahlen sind. dann machst du einfach die anweisungen, dass wenn er dann die Textmarke gefunden hat 3 zeichen weiter schauen soll ob auch der monat da ist.
kannst du aber auch in einem editfeld machen. da suchste dir vorher einfach eine variable aus wie zum beispiel die '??' oder einfach 'xx' und überprüfst vorher dann für welche stellen die stehen, und überspringst dann halt soviele wie da stehen(natürlich an den richtigen stellen)
Zweiter Versuch:
Also soweit ich weiss gibt es sowas nicht(ist mir zumindest noch nicht vorgekommen) die haben das wahrscheinlich auch selber programmiert, klingt auch nicht zu schwer. Das mit den Textmaken (bei dir dann 'Date and Time') lässt dich das datum finden was dan anhand der eingabe überprüft wird. Die Form die du vorgibst is ja dir überlassen. Aber um Anwendungsfehler in form ungültiger eingaben zu minimieren würd ich zu mehreren Edits greifen.
Hoffe es ist verständlich und hilft!
FFKangoroo
Moderiert von raziel: Doppelposting entfernt.
|
|
mega 
      
Beiträge: 46
Win XP
D3 Prof
|
Verfasst: Sa 13.05.06 12:23
Das eigentliche Problem ist, das ich den Aufbau von Datum und Zeit nicht vorgeben will, damit das Programm möglichst universell wird.
Mit vorgegebenem Aufbau ist mir klar, wie ich es machen kann.
|
|
Horst_H
      
Beiträge: 1654
Erhaltene Danke: 244
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Sa 13.05.06 13:32
Hallo,
ist dies nicht der klassische Anwendungsfall fuer regulaere Ausdruecke:
regexpstudio.com/DE/...Expr/Help/About.html
Gruss Horst
|
|
FFKangoroo
      
Beiträge: 33
WIN XP SP2
Delphi 7
|
Verfasst: Sa 13.05.06 13:34
hmm? also es kann sein dass das Datum mal so '13.05.2006' in der log steht oder mal so '13.5.06' ? wenn ja wo is der sinn? sollte wenn dann einheitlich sein.
Steht es aber immer in dem selben Format in der Log Datei und der Benutzer soll entscheiden wie er sucht, kannste es ja so machen:
Am einfachsten wieder mit mehreren editfeldern. jetzt musst du nur jede eingabe analysieren. Mit der stringlänge kannst du dir dann das Format zurecht suchen. und dann jeweils noch eine postion weiter suchen wenn die Führungsnull fehlt(oder halt 2 wenn die 20 im jahr fehlt.
Aber sei dir gewiss dass jedes bisschen individualität auf kosten der länge der prozedur geht.
Ich weiss zwar selber dass es oft der wunsch ist etwas allgemeingültiges zu schaffen, aber es ist meist nicht notwendig. Mein Rat wäre daher gib ein festes Format vor wenn du dir arbeit sparen willst
|
|
FFKangoroo
      
Beiträge: 33
WIN XP SP2
Delphi 7
|
Verfasst: Sa 13.05.06 13:39
Hmm so wie ich das jetz auf die schnelle verstadnen habe ist das doch nur zum überprüfen ob eine eingabe der vorgegeben form entspricht oder nicht?
FFKangoroo
|
|
mega 
      
Beiträge: 46
Win XP
D3 Prof
|
Verfasst: Sa 13.05.06 13:52
FFKangoroo hat folgendes geschrieben: | hmm? also es kann sein dass das Datum mal so '13.05.2006' in der log steht oder mal so '13.5.06' ? wenn ja wo is der Sinn? sollte wenn dann einheitlich sein. |
Innerhalb einer Datei ist es einheitlich.
Aber in Dateien aus anderen Tests nicht.
Es handelt sich bei den Dateien um Ergebnisse aus einem automatischen Testsystem. Die Testmodule sind aber von verschiedenen Leuten geschrieben (nein, ich habe da erstmal keinen Einfluss drauf. Und die nächste Version irgenwann hat den Auswerter/Sucher gleich eingebaut).
Und wenn das Programm auf ein Log aus einem ganz anderen System losgelassen wird, ist das Problem wieder da.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Sa 13.05.06 14:03
Eine automatische Analyse ist nicht möglich, Stelle dir vor, dass auch noch Tag und Monat vertauscht sind! Ich hatte einen ähnlichen Fall und habe dann im Programm die Möglichkeit hinterlegt, ein Profil zu erstellen.
Dort konnte dann der Aufbau des Datums eingestellt werden. Anhand dessen habe ich dann eine Analyse des Datums gemacht. Wenn es dann falsch war, hatte der Anwender Schuld.
Theoretisch kann man das in gewissen Grenzen sicher automatisch analysieren. Aber bei folgender Konstellation sind eindeutig Grenzen gesetzt:
Zeitraum: 06.06.06 bis 07.06.06.
Jetzt versuche mal heraus zu bekommen, welcher Zeitraum tatsächlich gemeint ist. Ein Jahr, ein Tag oder ein Monat. Das Datum könnte folgende Formate haben: TT.MM.JJ, MM.TT.JJ, JJ.TT.MM, JJ.MM.TT.
Innerhalb der Log-Datei könnte man es vielleicht wieder feststellen, wenn für jeden Tag Daten drin stehen, aber es bleibt doch immer ein gewisses Rest-Risiko.
|
|
mega 
      
Beiträge: 46
Win XP
D3 Prof
|
Verfasst: Sa 13.05.06 14:13
jasocul hat folgendes geschrieben: | Eine automatische Analyse ist nicht möglich, Stelle dir vor, dass auch noch Tag und Monat vertauscht sind! Ich hatte einen ähnlichen Fall und habe dann im Programm die Möglichkeit hinterlegt, ein Profil zu erstellen. |
Ich will das ja nicht automatisch. Der Benutzer soll es eingeben können. Ich hatte nur irgendwie gehofft, das das einfacher geht, als 'von Hand' was zu programmieren um die Formatangabe zu analysieren.
|
|
FFKangoroo
      
Beiträge: 33
WIN XP SP2
Delphi 7
|
Verfasst: Sa 13.05.06 14:17
Aso, hmm, da sag ich dann mal viel spaß. also du hast dann andere dateien die du damit öffnen möchtest? is ja so wie wenn du versucht ein .pdf file im editor zu öffnen. der weiss nicht wie er etwas interpretieren soll esseidenn jemand hat ihm vorher den schlüssel gegeben. was umgekehrt heisst du musst jeden fall vorher deklarieren. und auswählen wie er suchen muss. ansonsten hast du ja auch keine textmarke wo er einhaken kann mit dem suchen weil die ja nicht bei jedem gegeben sein muss.
was auch noch gehen würde ist einfach dass du ganz viel verschachtelst. aber das ist mir zu viel arbeit dir die fälle aufzulisten die du abfragen musst.  *faulist*
da ist es am besten wenn du vorher ein bäumchen zeichnest wie die abfrage gehen sonn und dann halt ganz oft "if..then if..then.. else .. else.." aber wie gesagt je individueller desto komplizierter. was anderes fällt mir momentan nicht ein. vielleicht steh ich auch auf nem schlauch
FFKangoroo
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Sa 13.05.06 14:19
Das hatte ich auch verstanden.
Ich wollte nur noch mal auf die allgemeine Problematik eingehen.
Eine Mustersuche in einem String ist mir nicht bekannt. Aber ich könnte mir vorstellen, dass schonmal jemand sich mit sowas beschäftigt hat. Hast du schon bei www.torry.net nachgesehen?
|
|
FFKangoroo
      
Beiträge: 33
WIN XP SP2
Delphi 7
|
Verfasst: Sa 13.05.06 14:21
Weisst du eigentlich wie in einem bestimmten Log das Format des datums ist? wenn ja dann brauchst du doch gar nicht erst zu analysieren dann kannst du ja einfach so ins suchfeld eintippen. wenn nicht dann musst du ja wirklich jede mögliche anordnung bedenken. und das von jasocul beachten
FFKangoroo
|
|
mega 
      
Beiträge: 46
Win XP
D3 Prof
|
Verfasst: Sa 13.05.06 14:25
Ich will doch nix analysieren.
Der Benutzer soll einfach eingeben, wie das Datum aufgebaut ist und wie man es erkennt (was vor dem Datum steht).
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Sa 13.05.06 14:27
Wieso nimmt man nicht einfach ein 'StrToDateTime' in Verbindung mit dem globalen Datumsformat, das natürlich verändert werden kann. Wenn der Anwender dieses Format einfach vorgibt, kann die Logdatei eingelesen werden. Einfach mal die OH bemühen.
_________________ Na denn, dann. Bis dann, denn.
|
|
mega 
      
Beiträge: 46
Win XP
D3 Prof
|
Verfasst: Sa 13.05.06 21:28
Ich machs jetzt doch komplett selber. Ist garnicht so extrem, wie ich mir das erst vorgestellt hab.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Sa 13.05.06 22:22
Klar, wieso einfach, wenn's auch umständlich geht. 
_________________ Na denn, dann. Bis dann, denn.
|
|