Hallo Scripter,
im Thema
http://www.hilfdirselbst.ch/..._P450750.html#450750 geht es darum, aus einem Text die Zeichenfolgen "Ziffern mit Punkten" herauszufiltern, welche ein Datum sein könnten.
Als Script-Neuling schlägt sich der Michael sehr gut, hat er doch Methoden entwickelt, welche die Aufgabe zuverlässig ausführen.
Wie gegen Ende jenes Themas schon erwähnt, könnte das Herauspicken der "Kandidaten" direkter geschehen. Im besagten Script wird mit "every word" zuerst eine Liste aller Worte erstellt. Dann werden in einer Schleife diese Elemente abgearbeitet und wenn sie einen Punkt enthalten und eine gewisse Länge aufweisen, an eine neue Liste gehängt. Dann werden in einer weiteren Schleife die Übriggebliebenen mit dem Punkt als Trenner zerlegt. Nur wenn sich drei Teile ergeben, werden sie einzeln in Ganzzahlen verwandelt und in der Folge wird geprüft, ob es sich um mögliche Teile eines Datums handelt.
Wenn wir einen Filter einsetzen, der nur Zeichenfolgen auflistet, welche Ziffern und zwei Punkte enthalten, dann kann auf das problematische Auflisten aller Worte verzichtet und die weiteren Test können vereinfacht werden.
Dazu braucht es aber ein Helferlein, welches in einem Text die Ziffern erkennt. Ich habe mich für die Scripting Addition
Satimage.osax entschieden, weil sie mir vertrauter ist, als do-shell-script-Befehle.
Falls sich diese Scripting Addition noch nicht im Ordner "Library/ScriptingAdditions" befindet, kann man sie hier herunterladen:
http://www.satimage.fr/...ompanion_osaxen.html.
Zuerst aber den Skripteditor beenden, dann im zweiten Abschnitt der Website auf den Link "Satimage osax 3.5.2 (build 360)" klicken. Die Installation erfolgt problemlos.
Jetzt kann geprüft werden, ob das Herauslösen von Datumskandidaten gelingt. Voraussetzung ist, dass die Daten in der Formatierung
dd.mm.yyyy oder
dd.mm.yy getippt sind.
Der try-Wickel ist zwingend notwendig. Damit kann eine Fehlermeldung verhindert werden, wenn die Textkette keine Kombination von Ziffern/Punkt/Ziffern/Punkt/Ziffern enthält (oder keine dem definierten Muster entspricht).
Der Satimage-Befehl setzt das Ergebnis in die Variable
punktListe.
Die einzelnen Teile des Befehls:
find text = finde den Text,
welcher dem
Muster zwischen den Anführungszeichen entspricht,
in textBlock = im String textBlock,
with regexp = reguläre Ausdrücke verwenden
all occurrences = alle Vorkommen
and string result = nur die Textketten
Mit der letzten Option wird das Ergebnis auf die gefundenen Strings beschränkt. Sonst würde
find text auch die Position im Originaltext und die Länge der gefundenen Strings zurückgeben.
Zum Such-
Muster ...
Nur die Gruppe in der Mitte darf auf zwei Stellen fixiert werden. Bei der ersten und der letzten muss man alle vorhandenen aufnehmen. Sonst könnte bei einer Beschränkung auf ebenfalls je zwei aus dem Beispiel 123.12.456 das gültige Datum 23.12.45 werden.
Das Ergebnis des obenstehenden Beispiels:
{"123.08.69", "03.04.2010", "12.10.02"} Es sind also schon drei "unmögliche" weggefallen. Die restlichen werden in einem weiteren Abschnitt untersucht und behalten, falls sie die Kriterien (Tag = 2 Stellen, zwischen 1 und 31; Monat = 2 Stellen, zwischen 1 und 12; Jahr = 2 oder 4 Stellen) erfüllen.
Gruss, Hans