RegExp gesucht!

Vielleicht kann mir ja jemand aus der werten Leserschaft weiterhelfen. Ich stecke mal wieder in einer Sackgasse, weil für mich wohl reguläre Ausdrücke auf ewig ein Buch mit 7 Siegeln bleiben werden. Genaugenommen stehe ich vor folgendem Problem:

Eine Datei mit ca. 16.000 Zeilen kommagetrennter Datensätze muss umgebaut werden. So ein Datensatz hat dann in etwa das folgende Format:

012345;x;x;x;x; <Suchwert> ;bla;foo; [...] ;bar

Das Feld in dem gesucht werden soll, hat eines der folgenden Formate:

01.01.2004 - 1.01.2004 - 1.1.2004 - 01./02.01.2004 - 1./2.01.2004 - 1./2.1.2004

Dieser Wert soll nun, wenn es sich um ein einzelnes Datum handelt, generell nach "dd.mm.yyyy" umgebaut werden und ein leeres Feld muss ans Ende des Datensatzes, sind es zwei Daten, dann soll das erste da rein und das zweite als zusätzliches Feld ans Ende des Datensatzes.

Was also muss ich grep jetzt sagen, damit das funktioniert? Kann da jemand weiterhelfen? :blush:

Schrottie

Ich blogge hier seit Anfang 2005 über wechselnde Themen. Zumeist handelt es sich dabei um Linux, Android, Geocaching oder Fotografie, aber zunehmend auch rund ums Fahrradfahren (mit MTB und Rennrad), das ich nach einigen Jahren Pause wieder für mich entdeckt habe. Dabei ist die Themenwahl insgesamt recht selektiv, also ich schreibe immer nur dann, wenn mich etwas wirklich interessiert und/oder bewegt und so kommt es dann auch, das man hier zuweilen auch private Dinge findet. Wer mir für die Arbeit ein kleines Dankeschön zukommen lassen möchte, der kann dies gern über meinen Amazon Wunschzettel tun. :-)

6 thoughts to “RegExp gesucht!”

  1. oh na das hört sich ja knifflig an. du willst also auf eins dieser datumsformate prüfen? und es dann in ein anderes format umwandeln?

  2. für die ersten 3 formate würde ich es is so ausprobieren (für die letzten 3 fällt mir nichts richtig ein):

    (bestimmt nich sonderlich elegant, sofern es funzt)
    „\(0?[1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31])\.(0?[1|2|3|4|5|6|7|8|9|10|11|12])\.([0-9]{4})\“

    oder vielleicht
    „\(0?[0-9]|[0-9]{2})\.(0?[0-9]|[0-9]{2})\.([0-9]{4})\“

    mit $1.$2.$3 müsstest du dann auf die gefundenen ergebnisse aus den runden klammern zu greifen können

  3. @Mario: Excel? Okay, wenn es sein muss, dann bau ich Dir in Excel einen CD-Player. Meinetwegen koche ich auch Kaffe damit. Aber dieses Problem stammt aus einer verkorksten Exceltabelle und lässt sich da mit Hausmitteln nicht wirklich lösen, eben wegen dem in einem von 38 Feldern falsch genutzten Format. 🙁

    @Brian: So kompliziert wollte ich das eigentlich nicht machen. Ich wollte das eher in einem Rutsch ganz eleganzt lösen (s/RegEx1/RegEx2). 😥

  4. „Was also muss ich grep jetzt sagen, damit das funktioniert? Kann da jemand weiterhelfen?“

    ich pflege in solchen fällen immer „mach ma“ zu sagen…
    ich gehe aber davon aus, das das dir nicht wirklich weiterhilft… 😕 🙄

Kommentare sind geschlossen.