News   Magazin   Börse   Links   ArcArchie   Homepages
 Magazin  Die erweiterte Suche bei StrongED Home 
Hardware   Software   Praxis   Sonstiges  
Die erweiterte Suche bei StrongED  Carlos Michael Santillán  19. 4. 2008

Bei jeden ordentliche Texteditor gibt es eine Suchfunktion. Eine Blitzeinführung zur Suche in StrongED findet man hier. Bei StrongED gibt es drei Möglichkeiten zum Suchen. Die "interaktive Suche" (<F4>), "Suchen und Ersetzen" (<Umschalt><F4>) und die "Fundliste" (<F2>). Mit allen drei Suchen kann man Texte nach der angegebenen Zeichenfolge durchsuchen. Wenn man also z. B. nach "der" sucht, wird man Stellen im Text finden bei dem diese drei Buchstaben in dieser Reihenfolge vorkommen. Wenn man das Ergebnis der Suche weiter einschränken möchte, kommt man mit der einfachen Suche nicht sehr weit. Bei "Suchen und Ersetzen" und der "Fundliste" gibt es zusätzlich die Möglichkeit der erweiterten Suche. Diese erweiterte Suche hat Ähnlichkeiten mit den regulären Ausdrücken aus der Unixwelt, funktioniert aber etwas anders und hat auch leider nicht alle dessen Möglichkeiten. Aber trotzdem hat man mit der erweiterten Suche von StrongED ein weit mächtigeres Werkzeug als mit der einfachen Suche zur Verfügung. Bei der Fundliste gibt es die Möglichkeit mit einen regulären Ausdruck den Text zu durchsuchen, aber hier möchte ich mich nur der erweiterten Suche zuwenden. Das beste ist wenn man einen längeren deutschsprachigen Text in StrongED lädt, die folgenden Beispielen selber nachvollzieht und dann mit den Möglichkeiten der erweiterten Suche spielt.

Fundliste und erweiterte Suche

Lassen wir erst mal das Ersetzten außen vor und suchen vorerst nur über die Fundliste. Dafür muß man zuerst das Fenster der Fundlisteneingabe mit der Taste <F2> öffnen. Dort muß man die Routine durch klicken auf Erweitert umstellen. Das Fenster wird sich dann, wie in der Abbildung zu sehen, vergrößern um einige zusätzlichen Knöpfe anzuzeigen. Diese Knöpfe können für die erweiterten Suchanfragen hilfreich sein. Damit man die Treffer im Text sieht, habe ich unter Anzeige... die Option Text markieren ausgewählt. Um in der erweiterten Suche eine einfache Suche abzusetzen, muß man die Zeichenfolge innerhalb von Anführungszeichen schreiben. Ich nehme als Beispiel die Zeichenfolge "der", da diese in deutschsprachigen Texten recht häufig vorkommt. Mit der Anfrage "der" stellt man also eine einfache Suchanfrage innerhalb der erweiterten Suche. Man kann alternativ auch auf den Knopf "str" klicken und dann "der" zwischen den Anführungszeichen eingeben. Bei einen längeren deutschen Text sollte es mehrere Fundstellen geben. Man könnte diese Anfrage auch wie folgt schreiben: "d" "e" "r". Das macht hier keinen Sinn, zeigt aber wie man in der erweiterten Suche Muster verbinden kann, denn auf "d" muß "e" folgen und dann muß "r" kommen. Diese Verbindung nennt man logische Und-Verknüpfung (AND).

Wie man evtl. schon bemerkt hat, kann es vorkommen das die gesuchte Zeichenfolge auch innerhalb von Wörter vorhanden ist. Wenn man nur das Wort "der" sucht enthält man unerwünschte Ergebnisse wie z. B. in "oder". Mit dem recht einfachen Trick " der ", also mit jeweils einen Leerzeichen vor und hinter "der", kommt man leider nicht sehr weit. Wenn das Wort "der" am Zeilenanfang oder -ende steht, wird dann das Wort nicht gefunden. Nun kommen die Möglichkeiten der erweiterten Suche zum Zuge. StrongED bietet einige vordefinierten Zeichengruppen, die mehrere mögliche Zeichen enthalten. In der Zeichengruppe White ist das Leerzeichen und der Zeilenumbruch enthalten. Mit White "der" White findet man alle Wörter "der" die entweder von Leerzeichen oder Zeilenumbrüchen umschlossen sind. Hier gibt es zwischen den beiden White und "der" zwei Und-Verknüpfungen.

Möchte man beispielsweise nach "der", "die" und "das" gleichzeitig suchen, sollte man die drei Zeichenfolgen mit einen logischen Oder (OR) verknüpfen. Man sucht dann also nach "der" oder "die" oder "das". Dies macht man in der erweiterten Suche von StrongED mit dem Zeichen |. Die Anfrage lautet also White "der" | "die" | "das" White. Zum Schreiben kann kann auch den Knopf x|y einsetzen. Man sollte die Oder-Verknüpfung mit runden Klammern gruppieren: White ("der" | "die" | "das") White. Man könnte auch sagen, das der erste Buchstabe immer ein "d" ist und so könnte man auch mit White "d" ("er" | "ie" | "as") White suchen.

Bei der Suche wurde zwar darauf geachtet das nur Wörter gefunden werden, aber wenn das Wort direkt an ein Satzzeichen oder Anführungszeichen grenzt, dann werden diese Wörter nicht gefunden. Mit der vordefinierten Zeichengruppe Punct kann man auch diese Zeichen finden. Direkt vor und hinter "der" muß also entweder ein Zeichen aus der White oder Punct Zeichengruppe stehen um gefunden zu werden. In der erweiteren Suche von StrongED muß man dies wie folgt schreiben: (White | Punct) "der" (White | Punct). Nun sollte man alle Wörter "der" im Text finden.

Sucht man alle Wörter die drei Buchstaben lang sind, so sollte man die vordefinierte Zeichengruppen Alpha benutzen. Diese Zeichengruppe steht für jeden beliebigen Buchstaben und kann man mit A abkürzen. Die Suche nach Wörtern mit drei Buchstaben könnte also (White | Punct) Alpha Alpha Alpha (White | Punct) oder kurz (White | Punct) A A A (White | Punct) lauten. Eleganter geht es aber wenn man angibt, daß Alpha bzw. A exakt dreimal vorkommen soll. Dies kann man mit der gescheiften Klammern erledigen. Mit (White | Punct) {A}3 (White | Punct) erhält man dreistelligen Wörter. Zusätzlich kann man die "Wiederholungsklammer" noch in anderer Form anwenden. Mit {" "}2:5 erhält man alle Lücken im Text, die zwei bis fünf Leerzeichen enthalten. Sollen aber beliebig viele Leerzeichen hintereinander gesucht werden, ist es nicht sehr sinnvoll als zweiten Wert eine sehr hohe Zahl anzugeben. Wenn man das Pluszeichen für die Wiederholungen benutzt, muß das gesuchte Muster mindestens einmal vorkommen. Kann aber beliebig oft hintereinander stehen. Dies würde man dann {" "}+ schreiben. Der Nachteil ist aber hier, daß dann auch einzelne Leerzeichen gefunden werden. Wenn man aber vor der Wiederholung noch ein einzelnes Leerzeichen Und-Verknüpft werden Stellen gefunden an den mindestens zwei Leerstellen hintereinander stehen: " " {" "}+.

Ausgesuchte vordefinierten Zeichengruppen
Alpha oder Abeliebiger Buchstabe
Digit oder Dbeliebige Ziffer
AlphaNum oder ADbeliebiger Buchstabe oder Ziffer
Upperbeliebiger Großbuchstabe
Lowerbeliebiger Kleinbuchstabe
PunctSatzzeichen und Anführungszeichen
WhiteLeerzeichen, Tabulatorzeichen und Zeilenumbruch
Any oder .beliebiges Zeichen
CursorWord oder CWWort unter dem Cursor
\tTabulator
\nZeilenumbruch (Linefeed)
\rWagenrücklauf (Carriage return)
\xXXZeichen mit dem Hexkode XX

Sucht man z. B. nach dem Namen "Bernard" und dessen Kurzform "Bernd" gleichzeitig, so kann man das Zeichen * benutzen, daß für jedes beliebiges Zeichen in einer Zeile steht. Das würde dann wie folgt aussehen: "Bern" * "d". Das ist aber recht unscharf und in der Zeile "Er kommt aus Bern oder der Umgebung." wird "Bern od" zu einen Treffer. Der Einsatz vom * ist also mit Vorsicht zu benutzen. Falls man einen beliebigen Text über mehrere Zeilen suchen möchte, kann man man dies mit ** machen. In dem Bernard und Bernd Beispiel kommt man besser mit "Bern" ["ar"] "d" ans Ziel. Der Text in den eckigen Klammern ist optional. Also zwischen "Bern" und "d" darf "ar" vorkommen, muß es aber nicht. Um die Bernard und Bernd Suche wasserfester zu machen muß man natürlich wieder die Leerzeichen, Zeilenumbrüche usw. berücksichtigen: (White | Punct) "Bern" ["ar"] "d" (White | Punct).

Ein interessantes Feature ist noch CursorWord oder kurz CW. Mit CursorWord kann man nach dem Wort suchen auf dem der Cursor gerade steht. Natürlich kann man auch bei CW die Möglichkeiten der erweiterten Suche einsetzen, wie z. B. mit (White | Punct) CW (White | Punct). Die erweitere Suche kann noch etwas mehr, wie z. B. den Anfang (<) und das Ende (>) einer Zeile zu finden. Ich möchte hier aber aufhören und ich denke das wichtigste wurde genannt und selbstverständlich kann man die genannten Verfahren noch weiter kombinieren, um das gesuchte auch sicher zu finden. Die wichtigsten vordefinierten Zeichengruppen stehen im Kasten. Weiteres findet man in der Hilfe von StrongED. Dazu muß man die Fundliste- oder die Ersetzensuche öffnen und dann die Taste <F1> drücken. Dort findet man zusätzlich vordefinierte Zeichen, die mit Hochkommas (') eingeschlossen werden.

Wenden wir uns dem Ersetzen zu. Dazu muß man mit <Umschalt><F4> das "Suchen und Ersetzen" Fenster öffnen und über die Checkbox Erweiterte Suche die erweiterte Suche einschalten. Wie bei der Fundliste wird das Fenster vergrößert. Die Suche geht genauso wie bei der Fundliste, aber man kann halt die Fundstelle mit einen Text ersetzen. Wenn man, warum auch immer, im Text "der" mit "die" ersetzen möchte, dann muß man nach "der" suchen und mit "die" ersetzen. Dabei muß "die" in Anführungszeichen stehen. Wenn man mehrere hintereinaderstehende Leerzeichen durch ein einzelnes Leerzeichen ersetzen möchte, so kann man dies mit meinen StrongED Skript aus Skripte in StrongED oder mit der erweiterten Suche mit " " {" "}+ und der Ersetzung " " machen.

Das erweiterte Ersetzen bietet aber glücklicherweise noch mehr. In der Suchanfrage kann man Marken setzen, die man beim Ersetzen nutzen kann. Es gibt die Möglichkeit bis zu zehn Marken zu benutzen. Die erste Marke heißt @0, die zweite @1 usw. bis zu @9. Dabei steht die Marke @0 normalerweise für den Anfang der Fundstelle und @9 für das Ende der Fundstelle. In der Regel wird man also nur die Marken @1 bis @8 in den Sucheanfragen benutzen. Die markierten Stellen kann man dann beim Ersetzen verwenden. Beim Ersetzen muß man dann den gewünschten Bereich angeben. Möchte man z. B. den Anfang der Fundstelle bis zur Marke @1 beim Ersetzen verwenden schreibt man @01. Möchte man den Bereich zwischen Marke @1 und @2 beim Ersetzen nutzen, dann schreibt man @12. Möchte man den Text zwischen der Marke eins und drei wiederverwenden schreibt man @13. So kann man die Fundstelle zerschneiden und beim Ersetzen wiederverwerten.

Syntax der erweiterten Suche
"Muster"Zeichenkette
'Muster'vordefinierte Zeichenkette
Muster1 Muster2Und-Verknüpfung (AND)
Muster1 | Muster2Oder-Verknüpfung (OR)
~ MusterNicht-Verknüpfung (NOT)
(Muster)Gruppieren
{Muster}nn-malige Wiederholung
{Muster}n:mn- bis m-malige Wiederholung
{Muster}+mindestens einmalige Wiederholung
[Muster]Optional
*beliebige Zeichen, beliebig oft in einer Zeile
**beliebige Zeichen, beliebig oft über mehrere Zeilen
<Anfang der Zeile
>Ende der Zeile

Nehmen wir als Beispiel Kommazahlen, die im Text statt mit dem Komma in der angloamerikanischen Schreibweise mit Punkt geschrieben sind. Also z. B. "3.14". Dieser Punkt soll durch ein Komma ersetzt werden (3,14), damit die Zahl der hiesigen schreibweise entspricht. Dazu muß man eine Zahl finden auf der ein Punkt folgt und nach dem Punkt eine Zahl steht. Die Suche sieht wie folgt aus: {D}+ "." {D}+. Wie man dem Kasten entnehmen kann ist D die Kurzform von Digit und steht für eine beliebige Ziffer. Dank der geschweiften Klammer und dem folgenden Pluszeichen enthalten die Fundstellen mindestens eine Ziffer vor und mindestens eine Ziffer nach einen Punkt. Um dem Punkt in den Fundstellen durch ein Komma zu ersetzen muß die Suchanfrage mit zwei Marken erweitert werden: {D}+@1 "."@2 {D}+. Die erste Marke markiert die Zahlen vor dem Punkt und die zweite die Zahlen hinter dem Punkt. Mit der Ersetzung @01 "," @29 wird durch @01 der Bereich vom Beginn der Fundstelle bis zur Marke eins, also der Ziffer bzw. den Ziffern bis vor dem Punkt erfaßt. Dann wird das Komma geschrieben. Der Bereich @29 steht für die Ziffern ab der Marke @2, also hinter dem Punkt, bis zum Ende der Fundstelle. So kann man recht einfach "Punktzahlen" zu Kommazahlen wandeln. Wenn man nach (White | Punct)@1 "der"@2 (White | Punct) sucht und mit @01 "die" @29 ersetzt kann man das Wort "der" mit "die" ersetzen ohne dabei umschließende Leerzeichen, Satzzeichen usw. zu verlieren.

Die erweiterte Suche ist ein weiteres mächtiges Werkzeug von StrongED. Wenn man die erweiterte Suche beherrscht kann es durchaus eine Alternative für die StrongED Skripte sein. Zusätzlich kann man die erweiterte Suche in einen StrongED-Modus einsetzen. Weitere Informationen zur erweiterten Suche von StrongED findet man in der StrongED Hilfe. Ich selbst würde es sehr begrüßen, wenn man reguläre Ausdrücke nicht nur bei der Fundliste einsetzen könnte, sondern auch beim Suchen und Ersetzen. Da Tools bzw. Programmiersprachen wie grep, sed, awk, Perl usw. reguläre Ausdrücke benutzen, wäre es weit praktischer wenn auch StrongED beim Suchen und Ersetzen die regulären Ausdrücke unterstützen würde. Dann müßte man nicht für StrongED dessen erweiterte Suche erlernen wenn man die regulären Ausdrücke schon von anderen Tools bzw. Programmiersprachen kennt und auch andersrum wäre der Einstieg in diese Tools für den StrongED Erfahrenden viel einfacher.

Hardware   Software   Praxis   Sonstiges  
ArcSite   News   Magazin   Börse   Links   ArcArchie   Homepages