Notepad++ ist für mich der Texteditor Nummer eins! Er unterstützt beim Suchen wie beim Suchen und Ersetzen RegularExpressions (auf Deutsch: Reguläre Ausdrücke), kurz: RegEx genannt. Das Thema füllt ganze Bücher. Die meisten brauchen RegEx sicherlich sehr selten, was damit einher geht, dass man einmal erlerntes wieder großteils vergessen hat, wenn man es mal wieder benötigt. So ging es auch mir.
Mein Problem: Datumsumwandlung in einem SQL-String. – Jeder hat ein anderes Problem. Deshalb findet man viele Lösungen für andere Probleme im Web. Die dort gezeigten Lösungen werden aber in ihrer Syntax in der Regel nicht erklärt.
Mein Problem war es, Datumsformate wie „16.10.2024“ in „2024-10-16“ umwandeln zu müssen. Mit etwas RegEx-Restwissen und Suche im Web war der passende Suchstring schnell ermittelt: „\d{2}\.\d{2}\.\d{4}“ findet jeden String, der das Format dd.mm.yyyy (dd=Tag, mm=Monat, yyyy=Jahr) hat.
„\d“ steht für digit, also ganze Zahl, in den geschweiften Klammern steht die Anzahl der Ziffern
„\.“ steht für einen Punkt; ohne das Quoting (\) stünde der Punkt für irgend ein Zeichen – in diesem Fall hätte es auch ohne das Quoting funktioniert, weil ein Punkt ja ein Zeichen ist
Aber wie nun die gefundenen Zeichen nun umsortieren? Ich habe viele Lösungen gefunden, aber meine Frage, wie ich auf die Einzeldaten zugreifen könne, blieb offen. Schlussendlich habe ich es durch Herumprobieren (Probieren geht eben über Studieren) dann doch kapiert.
Der Fehler:
Mit dem Suchmuster „\d{2}\.\d{2}\.\d{4}“ finde ich nur den gesamten String.
Die Lösung:
Ich muss die einzelnen Fragmente mit runden Klammern gruppieren. Also: „(\d{2})\.(\d{2})\.(\d{4})“. So lassen sich die gefundenen Fragmente im Ergebnis adressieren mit: \3 (das Jahr), \2 (der Monat) und \1 (der Tag).
Die Ausdrücke für Suchen und Ersetzen müssen im Suche und Ersetzen-Dialog von Notepad++ also folgendermaßen aussehen:
Nun braucht man nur noch auf „Alle ersetzen“ klicken und die Datumsformate stimmen.
In meinem Fall wurden in weniger als einer Sekunde 6946 Daten im SQL-String geändert. Das wäre von Hand nicht fehlerfrei zu leisten gewesen. Es hätte Tage gedauert; also sehr viel länger als nach der RegEx-Lösung zu suchen.
Ich hoffe, dies nützt auch anderen. Auch für andere ähnliche Probleme.
Hier noch ein paar Online-RegEx-Editoren:
Kommentare
Keine Kommentare
Kommentare