Textfunktionen mit und ohne reguläre Ausdrücke

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

Schreibe einen Kommentar