User Tools

Site Tools


vba:tutorials:regexpreplacewithfunction

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vba:tutorials:regexpreplacewithfunction [26.11.2014 15:18:50]
yaslaw
vba:tutorials:regexpreplacewithfunction [19.10.2015 15:59:17] (current)
yaslaw
Line 1: Line 1:
 ====== [VBA][Code Pattern] RegExp Replace mit Funktion ====== ====== [VBA][Code Pattern] RegExp Replace mit Funktion ======
-Naja, der Titel ist ev. irreführend. Mir kahm aber kein besserer in den Sinn. +//Ein Tutorial zum Thema, wie man eine %%RegExp Replace%% in einer Schleife anwenden kann.// 
-\\ Es geht um folgendes: Mittels eines %%RegExp%% ermittle ich Teilstrings. Diese sollen über eine Funktion verändert werden und dann im String den Originalteilstring ersetzen.+ 
 +Naja, der Titel ist ev. irreführend. Mir kahm aber kein besserer in den Sinn. Es geht um folgendes: Mittels eines %%RegExp%% ermittle ich Teilstrings. Diese sollen über eine Funktion verändert werden und dann im String den Originalteilstring ersetzen.
  
 ===== Beispielsaufgabe ===== ===== Beispielsaufgabe =====
Line 11: Line 12:
 Dazu habe ich mal die Funktion [[vba:​cast:​char2unicode]],​ welche mir einen einzelnen Char nach Unicode wandelt. Dazu habe ich mal die Funktion [[vba:​cast:​char2unicode]],​ welche mir einen einzelnen Char nach Unicode wandelt.
  
-===== Umetzungen ​=====+===== Umsetzungen ​=====
 Mit %%RegExp.replace()%% kann ich bekanntlich keine User-Funktion ausführen. Darum löse ich das meistens wie folgt. Mit %%RegExp.replace()%% kann ich bekanntlich keine User-Funktion ausführen. Darum löse ich das meistens wie folgt.
  
 > Für die Ausgabe der Resultate verwendete ich die Funktion [[vba:​functions:​print_r:​index]] > Für die Ausgabe der Resultate verwendete ich die Funktion [[vba:​functions:​print_r:​index]]
 +==== Konzept ====
 +Ich erstelle ein %%RegExp%%-Objekt,​ das genau nur ein Treffer zurückgibt (global=off). Mit einer Schleife teste ich auf den String, ob %%RegExp%% noch einen Treffer hat. 
 +
 +Jeder Treffer wird ausgelesen. Mittels einer UDF (User Defined Function) kann man mit dem gefundenen String oder Submatches etwas machen
 +
 +Anschliessend nutze ich der %%RegExp%%.replace() um den Teilstring im Original durch den Neuen zu ersetzen
 +
 +Das ganez wiederholen bis keine Treffer mehr da sind
 +
 +==== Einschränkung ====
 +Es funktioniert natürlich nicht, wenn der neue String wieder dem Pattern entspricht. Wenn ich also bei %%IgnoreCase%% ''​A''​ durch ''​a''​ ersetzen will, landet das ganze in einer Endlosschleife.
 +
 ==== Version 1) Funktion mit detailiertem Aufbau ==== ==== Version 1) Funktion mit detailiertem Aufbau ====
 === Beispielsfunktion replUmlaute() mit detailiertem Aufbau === === Beispielsfunktion replUmlaute() mit detailiertem Aufbau ===
Line 57: Line 70:
  
 ==== Version 2) Kompakte Version ==== ==== Version 2) Kompakte Version ====
-In dieser Version verzichte ich darauf, alle Schritte einzeln durchzugehen. Auch das ertellen des %%RegExp%% überlasse ich der Funktion [[vba:​cast:​cregexp#​Abgespeckte Version|[VBA] cRegExp() Abgespeckte Version]]. Dann sieht der Code noch so aus.+In dieser Version verzichte ich darauf, alle Schritte einzeln durchzugehen. Auch das ertellen des %%RegExp%% überlasse ich der Funktion [[vba:​cast:​cregexp#​abgespeckte_version_crx|[VBA] cRegExp() Abgespeckte Version]]. Dann sieht der Code noch so aus.
 Ja, der erste ist besser lesbar. Wenn an aber ein Pattern immer wieder verwendet, erkennt man es beim lesen vom Code sofort. Ja, der erste ist besser lesbar. Wenn an aber ein Pattern immer wieder verwendet, erkennt man es beim lesen vom Code sofort.
  
vba/tutorials/regexpreplacewithfunction.1417011530.txt.gz · Last modified: 26.11.2014 15:18:50 by yaslaw