Manchmal ist es ganz praktisch, mehrere verschiedene
Suchen/Ersetzen-Läufe in einem Makro kombinieren zu können.
Oder der Cursor soll gezielt auf gewisse Inhalte gesetzt werden. Zu
diesem Zweck stehen in StarBasic sämtliche Möglichkeiten
des «Suchen & Ersetzen»-Dialoges zur Verfügung.
Die kommenden Ausführungen beziehen sich primär auf die
Suche, gelten aber ebenso für das Ersetzen. In den meisten
Fällen reicht die Verwendung von Replace an Stelle
von Search in den Methoden-Aufrufen, sowie ein
zusätzlicher Parameter für die zu ersetzende Zeichenkette.
Mittels
ActiveWindow.Search(SearchString$)
lässt es sich ganz einfach nach Inhalten suchen. RepeatSearch()
wiederholt die letzte Suche. Dabei werden die Einstellungen
berücksichtigt, die im Dialog zuletzt gemacht wurden. Ohne
Parameter wird dieser aufgerufen. Natürlich ist es in einem
Makro unpraktisch, wenn man solche Einstellungen über einen
Dialog machen muss. Aus diesem Grund steht das SearchSettings-Objekt
zur Verfügung. Dieses lässt über zahlreiche
Eigenschaften die Konfiguration der Such-Funktion zu:
ActiveWindow.SearchSettings.InSelection = True
ActiveWindow.SearchSettings.CaseSensitive = True
ActiveWindow.SearchSettings.WordOnly = True
ActiveWindow.Search("mh")
Mit diesem Aufruf werden beispielsweise nur jene Vorkommen von «mh» gefunden, welche klein geschrieben, als ganzes Wort in der markierten Auswahl stehen.
Erstaunlicherweise gibt es keinen Schalter in SearchSettings
für die globale Suche im ganzen Dokument. Dafür wurde
gleich eine eigene Methode implementiert, ebenso natürlich für
das Ersetzen
ActiveWindow.SearchAll("mh")
ActiveWindow.ReplaceAll("mh", "Michael Herger")
Will man nur zählen, wie oft ein Begriff im Dokument vorkommt, so hilft die verwandte Methode
ActiveWindow.SearchCount(SearchString$)
Diese liefert als Rückgabewert eine Zahl, ohne aber wie Search()
zu den einzelnen Fundstellen zu springen.
Eine erweiterte Möglichkeit, die nur in StarWriter, nicht aber in den anderen SO-Modulen zur Verfügung steht, ist das Suchen und Ersetzen von Formatierungen. Hierfür steht wiederum ein eigenes Objekt mit zahlreichen Eigenschaften zur Verfügung: ActiveWindow.SearchAttributes. Hier können fast alle Formatierungsmöglichkeiten von Zeichen (siehe auch «Die Font-Eigenschaft») und Absatzvorlagen gesucht und ersetzt (mit ReplaceAttributes) werden. Mit den folgenden Eigenschaften werden alle Zeichen, die bisher fett und kursiv formatiert waren, nur mehr kursiv dargestellt:
ActiveWindow.SearchAttribute.IsItalic = 1 ActiveWindow.SearchAttribute.IsBold = 1 ActiveWindow.ReplaceAttribute.IsBold = 0
Ein generell ganz mächtiges Werkzeug bei der Textbearbeitung sind die regulären Ausdrücke. Im StarOffice stehen die auf für das Suchen und (beschränkt) Ersetzen von Texten zur Verfügung. Aktiviert wird sie durch
ActiveWindow.SearchSettings.RegExp = True
Danach ist es beispielsweise möglich, mit folgendem Ausdruck in einem mit harten Zeilenschaltungen formatierten Text sämtliche Leerzeilen zu entfernen:
ActiveWindow.ReplaceAll("^$", "")
Alle möglichen Schreibarten von «Meier» werden mit folgendem Ausdruck gefunden:
ActiveWindow.SearchAll("M[ae][iy]er")
Weitere Informationen zu den regulären Ausdrücken, die vom SO unterstützt werden, findet sich in der Online-Hilfe für die Such-Funktion (aus dem Dialog per rechte Maustaste aufzurufen). Ein schönes Beispiel für das Suchen und Ersetzen im Allgemeinen und eine Möglichkeit der Anwendung regulärer Ausdrücke ist in Form des Beispiels «ROT13-Verschlüsselung für Textdokumente» verfügbar.