Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Universeller DateTime Converter (https://www.delphipraxis.net/186484-universeller-datetime-converter.html)

bekrause 6. Sep 2015 19:32

Universeller DateTime Converter
 
Hallo zusammen,

ich schreibe derzeit an einem Parser mit integrierter Textanalyse. Dieser Parser soll auch automatisch Datumsangaben extrahieren können. Dass klappt auch schon ganz gut.

Jetzt sollen die Daten jedoch nicht nur analysiert , sondern auch normalisiert werden. Das bedeutet, dass erkannte Format soll vereinheitlicht werden. Intern soll es also als TDateTime gespeichert werden.

Das Umwandeln von bekannten Datumsstrings ist relativ einfach. Der Ideenvielfalt an Datums- und Zeitangaben allein im Deutsch- und Englischsprachigem Raum ist jedoch keine Grenze gesetzt.

Ich habe teilweise Datumsangaben wie z.B. "Mo, Apr 14 2014, 11:15 am"

Bevor ich mich jetzt ransetze und für die verschiedenen Zeit und Datumsangaben Konverter schreibe, wollte ich mich mal umhören, ob es so etwas bereits irgendwo gibt.

Im Prinzip suche ich eine etwas ausgefeiltere Variante von StrToDateTime, oder VarToDateTime. Die beiden reichen leider nicht aus.

Ich bin auch nicht auf eine Delphi Klasse fixiert. Ich würde auch eine DLL nehmen. Es darf auch gerne etwas kosten.

Gruß Benno

Bjoerk 6. Sep 2015 22:23

AW: Universeller DateTime Converter
 
Würde mal schätzen, no chance. Alleine vom Datum her: das Format (Syntax, DateSeparator, die Reihenfolge von Day, Month, und Year ect.) müssen bekannt sein. Und bei der Zeitangabe, woher soll der Parser wissen, was zum Beispiel am bedeutet. Das deutsche Wort am oder als Zeitangabe ante meridiem. Ect..

Sir Rufo 6. Sep 2015 22:57

AW: Universeller DateTime Converter
 
Um den Aufwand bzw. die Machbarkeit zu bestimmen benötigt man eine Liste mit allen möglichen Darstellungen die erkannt werden sollen und was dabei erkannt werden soll.

Daraus baut man sich zunächst einen Unittest mit dem dann mögliche Kandidaten getestet werden.

Meistens reduziert sich das Problem nach dieser Aufstellung ;)

BTW: Als Test-Zeitpunkt eignet sich hervorragend z.B. 01.02.2003 04:05:06

Dejan Vu 7. Sep 2015 06:29

AW: Universeller DateTime Converter
 
Es könnte auch nicht schaden, redundante Angaben, wie z.B. den Wochentag, zu entfernen. Danach ergibt sich bestimmt ein Bild
Zitat:

Zitat von bekrause (Beitrag 1314916)
ich schreibe derzeit an einem Parser mit integrierter Textanalyse.

Wo ist (hier) der Unterschied zwischen einem Parser und einer Textanalyse?

Bjoerk 7. Sep 2015 08:23

AW: Universeller DateTime Converter
 
Ist m.E. ohne Angabe des Formats nicht möglich. Was soll zum Beispiel 01.02.03 sein? 1.2.2003, 3.2.2001, 1 Uhr 2 und 3 sec. ect..

Sir Rufo 7. Sep 2015 08:27

AW: Universeller DateTime Converter
 
Zitat:

Zitat von Bjoerk (Beitrag 1314935)
Ist m.E. ohne Angabe des Formats nicht möglich. Was soll zum Beispiel 01.02.03 sein? 1.2.2003, 3.2.2001, 1 Uhr 2 und 3 sec. ect..

Wir nähern uns der Schwierigkeit dieses Unterfangens ;)

Genau aus dem Grund soll man ja auch so eine Liste erstellen, was man reinschickt und was man als Ausgabe erwartet. Irgendwann kommt man an einen Punkt, wo es unlösbar wird, oder nur unter ganz bestimmten Bedingungen/Vorgaben lösbar wird. Dann werden einem auch die Grenzen klar.

Bjoerk 7. Sep 2015 10:02

AW: Universeller DateTime Converter
 
Ei, hann ich doch schonn in #2 geschrieb. :-D

Rollo62 8. Sep 2015 17:34

AW: Universeller DateTime Converter
 
Das kann man doch sicher irgendwie in RegEx lösen, alles relativ gleich strukturiert ...
Wo sind die Experten und Gurus (ich kanns nämlich nicht aus dem Stand :-( )

Rollo

hathor 8. Sep 2015 18:52

AW: Universeller DateTime Converter
 
Zitat:

Zitat von bekrause (Beitrag 1314916)
Ich habe teilweise Datumsangaben wie z.B. "Mo, Apr 14 2014, 11:15 am"
Gruß Benno

Wenn man so etwas wie oben mit normalem menschlichen Verstand in ein anderes Format umsetzen kann, dann kann man auch einen Parser dafür schreiben.
Zusätzliche Angaben, wie z.B. der Wochentag, können als Plausibilitätsprüfung dienen.

Dejan Vu 9. Sep 2015 07:16

AW: Universeller DateTime Converter
 
Also, eine Heuristik kann man schon schreiben. Wie Rufo schon schrieb:
  1. Was soll das Teil erkennen können? Also: Erstellen einer Tabelle mit : Eingabe und erwarteter Ausgabe. Zunächst nur unterschiedliche Kategorien, also z.B. 'DD.MM.YY' und 'DD.MMM.YY' und 'MMM DD YY' etc.
  2. Schreiben der Unittests. Und zwar für jede Kategorie einen
  3. Delphi-Quellcode:
    For unitTest in UnitTests do WriteCodeThatPasses(unitTest);
  4. Erweitern der Liste unter (1) für alle Monate, Wochentage etc. also alle Kongurenzklassen.
So. Da ich jetzt auch schon Beiträge wiederhole... Ist vielleicht alles gesagt?

PS: RegEx kann man natürlich z.T. auch verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf