André Minhorst, Duisburg
Die Arbeit mit Texten kann vielfältig sein. Dazu gehört das Durchsuchen von Zeichenketten nach anderen Zeichenketten, das Ersetzen von Zeichenketten durch andere Zeichenketten, Zerlegen von Zeichenketten und so weiter. Eine weitere wichtige Funktion ist das überprüfen von Zeichenketten auf bestimmte Merkmale. Im vorliegenden Beitrag erfahren Sie, wie diese Aufgaben mit und ohne Anwendung von regulären Ausdrücken erledigt werden können.
Das Untersuchen, Suchen und Ersetzen von bestimmten Elementen einer Zeichenfolge durch andere Zeichen wird meistens beim Import oder Export von Daten und der damit verbundenen Anpassung an das andere Format notwendig.
Access bietet hierzu einige Standardfunktionen an, mit denen sich alle gewünschten Aufgaben mit mehr oder weniger Aufwand erledigen lassen.
Für bestimmte Aufgaben gibt es aber auch spezielle Bibliotheken, die Funktionen zur Verfügung stellen, die man sonst mühevoll programmieren müsste.
Eine dieser Bibliotheken heißt Microsoft VBScript Regular Expressions und stellt so genannte reguläre Ausdrücke zur Verfügung. Diese Bibliothek enthält mächtige Werkzeuge zum Suchen und Ersetzen.
VBA bietet einige Möglichkeiten zur Manipulation von Zeichenketten. Wichtig dafür sind vor allem die vorhandenen Zeichenkettenfunktionen und die Vergleichsoperatoren, die nachfolgend vorgestellt werden.
Textfunktionen
VBA stellt einige Funktionen für die Arbeit mit Zeichenketten zur Verfügung. Die wichtigsten sind mit den gebräuchlichen Parametern inTab. 1 aufgelistet. Einige enthalten weitere Parameter. Für genauere Informationen konsultieren Sie die Onlinehilfe.
Vergleichsoperatoren
Neben den Textfunktionen, die größtenteils der eigentlichen Bearbeitung dienen, sind Vergleichsoperationen ein wichtiger Bestandteil bei der Anwendung der Textfunktionen. In Tab. 2 finden Sie eine Auflistung der gebräuchlichen Vergleichsoperatoren.
Platzhalter
Beim Like-Operator können im rechten Teil des Ausdrucks Platzhalter verwendet werden. Es gibt zwei Platzhalter: das Sternchen (*) und das Fragezeichen (). Das Sternchen steht für Null bis beliebig viele Zeichen, das Fragezeichen für genau ein beliebiges Zeichen. Der folgende Ausdruck ergibt beispielsweise den Rückgabewert True:
"info@access-im-unternehmen.de" Like "*@*.*"
Funktion |
Beschreibung |
Len(str) |
Ermittelt die Anzahl der Zeichen einer Zeichenkette str. |
Left(str,n) |
Gibt die ersten n Zeichen der Zeichenkette str zurück. |
Right(str,n) |
Gibt die letzten n Zeichen einer Zeichenkette str zurück. |
Mid(str,m,n) |
Gibt die Teilzeichenkette vom mten bis zum (m+n)ten Zeichen zurück. |
Instr(n, str1, str2) |
Gibt die Position zurück, an der sich die Zeichenkette str2 innerhalb der Zeichenkette str1 ab der nten Stelle befindet (0 bei keinem Auftreten). |
Replace(str1, str2, str3) |
Ersetzt die Zeichenkette str2 innerhalb der Zeichenkette str1 durch str3. |
Trim(str) |
Schneidet alle Leerzeichen am Anfang und am Ende von str ab. |
Chr(x) |
Gibt das dem ASCII-Code x entsprechende Zeichen zurück. |
Asc(str) |
Gibt den ASCII-Code für das erste Zeichen in str zurück. |
Tab. 1: Zeichenkettenfunktionen von VBA
Vergleichs-operator |
Beschreibung |
= |
Gleich. Gibt True zurück, wenn Zeichenfolgen exakt gleich sind. |
<, <=, >=, > |
Vergleicht Zeichenfolgen nach dem Wert der Asc-Funktion (Beispiel: Asc(„a“) = 97, Asc(„b“) = 98, also würde „a<b“ True zurückgeben. |
<> |
Ungleich. |
Like |
Wie “=“, allerdings unter Verwendung von Platzhaltern. |
Tab. 2: Vergleichsoperatoren von VBA
Ausdrücke wie dieser können beispielsweise zur Validierung von Werten – wie hier einer E-Mail-Adresse – verwendet werden.
Textfunktionen + Vergleichsoperatoren + Platzhalter + VBA =
Mit den genannten Werkzeugen lassen sich mit den unter VBA vorhandenen Konstruktionen wie For Next-, Do While- und anderen Schleifen die meisten Aufgaben mit mehr oder weniger Aufwand erledigen.
Mit der seit Access 2000 verfügbaren Funktion Replace lassen sich sogar in einem Rutsch mehrere Vorkommen einer Zeichenfolge durch eine andere ersetzen. Leider lassen sich innerhalb dieser Funktion keine Platzhalter verwenden, was deren Flexibilität enorm einschränkt.
… und was VBA noch fehlt
Wer zeit seines Lebens mit VBA gearbeitet hat, wird möglicherweise gar nicht viel vermissen, da er es gewohnt ist, aus den wenigen Grundfunktionen eigene Funktionen zusammenzustellen, die alle gewünschten Aufgaben erledigen.
Wer allerdings einmal einen Blick auf andere Programmiersprachen wie Java, Javascript oder PHP geworfen hat, mag in Anbetracht der vielen vorgefertigten Funktionen neidisch geworden sein.
Wie die beiden letzten Abschnitte andeuten, scheint die Definition dessen, welche Fähigkeiten VBA in Bezug auf das Thema des vorliegenden Beitrags nicht hat, aber haben sollte, schwierig zu sein.
Die im folgenden Kapitel vorgestellten regulären Ausdrücke und die damit verbundene Objektbibliothek sollten aber auf jeden Fall zum Schließen dieser Lücke beitragen.
Ein regulärer Ausdruck ist nichts anderes als ein Suchmuster, um übereinstimmende Muster in einer Eingabe zu finden.
Weiter oben haben Sie bereits die in Zusammenhang mit dem Like-Befehl zur Verfügung stehenden Platzhalter wie das Sternchen und das Fragezeichen kennen gelernt.
Reguläre Ausdrücke bieten nicht nur Platzhalter für eines oder mehrere Zeichen, sie sind noch wesentlich mächtiger.
Einsatzgebiete von regulären Ausdrücken
Die Verwendung regulärer Ausdrücke erweitert die Möglichkeiten von VBA um einige wichtige Punkte. Als Einsatzgebiete bieten sich beispielsweise die in den beiden folgenden Abschnitten beschriebenen an.
überprüfung eingehender Daten
Der Export von Daten externer Datenquellen birgt viele Fehlerquellen in sich, da die Datentypen der zu importierenden Daten nicht mit den Zieldatentypen übereinstimmen. Mit regulären Ausdrücken können Sie das Format der eingehenden Daten prüfen.
Eingabevalidierung
Viele Datenfelder erwarten Eingaben in speziellen Formaten. Dazu gehören Internetadressen, E-Mail-Adressen, Telefonnummern, Autokennzeichen und so weiter. Sie können zwar in Formularen ein entsprechendes Eingabeformat festlegen, aber Sie stellen dem durchschnittlichen Benutzer damit ein sehr ungewohntes Eingabeelement zur Verfügung.
Mit regulären Ausdrücken können Sie leicht überprüfen, ob der eingegebene Ausdruck den Vorgaben entspricht, und den Benutzer gegebenenfalls auf Eingabefehler aufmerksam machen.
Parsen von Zeichenketten
Die Vielfalt der bei regulären Ausdrücken zur Verfügung stehenden Platzhalter reicht aus, um auch völlig unkonventionell formatierte Texte so hinzubiegen, wie man sie haben möchte. Für das Einlesen und Umwandeln von Daten anderer Formate sind reguläre Ausdrücke gut geeignet.
Für die Verwendung von regulären Ausdrücken in Access ist die Einbindung einer Objektbibliothek erforderlich. Diese heißt Microsoft VBScript Regular Expressions x.0 und steht auf Ihrem Rechner zur Verfügung, wenn Sie entweder den Windows Scripting Host oder den Internet Explorer ab Version 5.5 installiert haben.
Den Verweis auf die Bibliothek setzen Sie wie üblich durch den Aufruf des Dialogs Verweise über den Menüeintrag Extras/Verweise und anschließende Auswahl des gewünschten Eintrags (siehe Bild 1).
Bild 1: Setzen des Verweises auf die gewünschte Bibliothek
Anschließend stehen das Objekt RegExp sowie seine Eigenschaften und Methoden in Access zur Verfügung.
In den nachfolgenden Beispielen erfahren Sie auf anschauliche Weise, wie Sie das RegExp-Objekt verwenden können und welche Methoden und Eigenschaften dabei zum Einsatz kommen.
Deklaration und Instanzierung
Mit den folgenden beiden Anweisungen erstellen und füllen Sie die Objektvariable objRegExp mit dem gewünschten Objekt:
Dim objRegExp As RegExp Set objRegExp = New RegExp Public Function Suche(strText As String, _ strSuchbegriff As String) As Boolean Dim objRegexp As RegExp Set objRegexp = New RegExp objRegexp.IgnoreCase = True objRegexp.Pattern = strSuchbegriff Suche = objRegexp.Test(strText) End Function
Quellcode 1
Public Function SucheMitPosition(strText As String, _ strSuchbegriff As String) As Integer Dim objRegexp As RegExp Dim objMatch As Match Dim objMatchCollection As MatchCollection Set objRegexp = New RegExp objRegexp.IgnoreCase = True objRegexp.Pattern = strSuchbegriff objRegexp.Global = True Set objMatchCollection = objRegexp.Execute(strText) For Each objMatch In objMatchCollection Debug.Print objMatch.FirstIndex, _ objMatch.Length, objMatch.Value Next objMatch End Function
Quellcode 2
Wenn Sie nun den Objektnamen gefolgt von einem Punkt in den VBA-Editor eingeben, erhalten Sie einen überblick über die zur Verfügung stehenden Methoden und Eigenschaften (siehe Bild 2).
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo