Reguläre Ausdrücke als Suchmuster in Moskito GIS
Vor einer Weile habe ich hier einen Beitrag über reguläre Ausdrücke bei Dateien veröffentlicht. Es sollte ja noch einen 2. Teil geben, also diesen hier. Aber erst mal ein kleines „Problem“: Sie müssen zum Ausprobieren eine neue Moskito-Version installieren. Denn ich habe bei den Beispielen gemerkt, dass nicht alles, was wünschenswert ist, auch schon funktioniert.
Damit für jeden etwas dabei ist gibt es die Beispiele jeweils als Kommando für die Eingabezeile und in einer Variante für die Oberfläche.
Das Suchen und Selektieren mit regulären Ausdrücken.
Gesucht wird in Moskito mit der Funktion
FindByAttributes
kurz FND
oder mit dem Menü Selektieren -> nach Attribut …
Dort wählt man einen Attributnamen und einen Wert aus, alles noch ohne reguläre Ausdrücke. Ich habe jetzt in der Anwendung Strom auf Stromkreisfarbe als Thema geschaltet, dann sieht man besser, was passiert. Jetzt das Attribut .COU auswählen und über „Alle“ die Objekte (Kabel) mit diesem Wert selektieren.
Auf Kommandoebene ist das ein
FND .COU/*
Der Attributname ist Case-Insensitiv, wir konvertieren intern immer in Großbuchstaben.
Jetzt weiß ich, dass einige Kabel die Farbe 264, andere die Farbe 272 haben. Ich kann einen Wert auswählen und über "Neu" selektieren, auch hier noch ohne echte reguläre Ausdrücke. Auf der Eingabezeile heißt das dann z.B.
FND .COU/264
FND .COU/272
Wenn ich jetzt beide gleichzeitig haben möchte brauche ich reguläre Ausdrücke - ja, es geht auch in 2 Schritten mit „Zufügen“, aber das ist hier ja nicht das Thema.
Ich setzte also beide Werte in () und trenne sie durch |. Damit die Funktion auf RegEx umschaltet, muss ich noch ein (?) voranstellen.
Auf Kommandoebene ist das dann ein
FND ".COU/(?)(272|264)"
Somit sind beide Farben ausgewählt.
Ein großer Unterschied zwischen den Einfachen Ausdrücken von früher und echten Regulären Ausdrücken ist, dass auch Teilstrings gefunden werden. Bei der Verwendung der regulären Ausdrücke sind zusätzlich "" wegen der Klammern notwendig.
FND .COU/26
findet nichtsFND ".COU/(?)26"
findet auch 264, aber auch z.B. 1264 und 22648
Es gibt hier natürlich auch einen Ausweg zum Eingrenzen der Suche. Es gibt zwei spezielle Zeichen für den Anfang und das Ende einer Zeichenkette bzw. einer Zeile:
FND ".COU/(?)^264$"
Dort ist das ^ der Anfang der Zeichenkette, das $ ist das Ende. Und dieser Ausdruck findet dann nur 264.
Alles was ich hier geschrieben habe gilt auch für andere Funktionen. So kann die Funktion f_getLines gezielt Zeilen aus einer Datei extrahieren.
Zum Abschluss gibt es noch einen wichtigen Link, mit dem die Ausdrücke getestet werden können: