Register
Suchen mit "regulären Ausdrücken" (ab V27)
srx suchbegriff acon
Suche
in dem Text, der momentan in der iV steht, nach dem suchbegriff (diesen nicht in "... einschließen)
z.B.: x var kn\srx xyz\if yes mes Die Zeichenfolge xyz kommt im Satz vor!
Wenn suchbegriff fehlt, wird der Inhalt der Variablen #u!! genommen
srX [dahinter nichts angeben] acon
Dasselbe, aber verwendet den zuletzt benutzten suchbegriff
Vorteilhaft in Schleifen, weil etwas schneller.
Der suchbegriff kann irgendein Regulärer Ausdruck sein. Wie solche Ausdrücke aussehen müssen, ist in einer gesonderten Beschreibung dokumentiert.
Man muß also jeweils vorher die interne Variable mit dem zu durchsuchenden Inhalt füllen! Das kann z.B. so aussehen:
var kn (Inhalt des aktuellen Satzes) oder
var #20 " " #22 " " #85 (Inhalt der drei Felder #20, #22 und #85
var Fxyz.txt (Inhalt der Textdatei xyz.txt)
Der Text in der iV (nicht der Suchbegriff!) wird für die Suche umcodiert. Normalerweise nimmt das Programm dazu die p- oder q-Tabelle der Indexparameter, und zwar diejenigen, die A in a umwandeln. (Bei cat.api ist das die q-Tabelle, beim Neutralformat die p-Tabelle.)
Mit dem Befehl set x .. kann man aber eine andere Tabelle setzen, z.B. die q-Tabelle der Anzeigeparameter mit set xdq .
Ergebnis
Mit if yes stellt man fest, daß der Suchbegriff zutrifft, d.h. in der iV vorkommt.
Mit if no reagiert man darauf, daß er nicht zutrifft.
Mit if cancel stellt man fest, ob es einen Fehler im Suchbegriff gibt. Dann steht in der iV die zugehörige Fehermeldung.
Meistens empfiehlt sich deshalb folgendes Muster:
Zuerst #u!! mit dem Suchbegriff vorbereiten, dann:
nur zum Testen:
var "abcxyz"
srx
Syntaxfehler in #u!!? Dann Meldung ausgeben und Ende
if cancel mes;end
wenn nicht, dann echtes Suchen
:schleife
... Inhalt der iV vorbereiten,
srX // Inhalt in iV untersuchen, ob darin Inhalt von #u!! vorkommt
if no jump nohit
if yes jump hit
Vollständige Anwendungen (Siehe auch Volltextsuche im Menü "Finden")
Die Anwendung kann man studieren in den folgenden FLEXen. Man kann sie alle mit X ... starten oder über den neuen Menüpunkt "Finden / Volltextsuche".
ftr.flx , mit dem man eine Volltextsuche in der gesamten Datenbank durchführen kann, Ausprobieren
grep.flx , womit man Textdateien durchsuchen kann. Ferner gibt es
rsfsr.flxb zum Durchsuchen der aktuellen Ergebnismenge und
algsrch.flxc zum Durchsuchen von Grunddateien (früher die Aufgabe des DOS-Programms SRCH.EXE).
Es folgen ein paar Rezepte für häufig auftretende Aufgaben
Beispiel 1:
RegEx-Suche im aktuellen Datensatz geht so:
#u!! suchbegriff
var kn
srx
// Fehler im Suchbegriff?
if cancel message
// Erfolg?
if yes jump gefunden
Denn var kn bringt den gesamten aktuellen Satz in die iV, und dort muß er stehen, um von srx durchsucht zu werden.
Statt dessen geht auch, wenn der Suchbegriff konstant ist:
var kn
srx suchbegriff
if yes ...
Beispiel 2:
RegEx-Suche in der aktuellen Ergebnismenge geht so:
#u!! suchbegriff
perf rsfsr
if %FEHLER% mes;end
if Z<1 mes Nichts gefunden;end
sho list
weitere Verarbeitung der entstandenen neuen Erg.Menge
...
include rsfsr.inc
Beispiel 3:
RegEx-Suche in der Gesamtbank (!) geht so:
#u!! suchbegriff
perform ftr
var Z // Z ist der Trefferzaehler
if Z<1 jump misserfolg
var "Die Erg.Menge besteht aus " l " Sätzen"
mes
include ftr.inc
Beispiel 4:
RegEx-Suche in einer Grunddatei xyz.alg geht so:
#u!! suchbegriff
#u!f xyz.alg
perform algsrch
if Z>0 jump treffer
mes Leider nichts gefunden
end
:treffer
...
include algsrch.inc
Beispiel 5:
Einer der häufigsten Vorgänge in klassischen Batchdateien ist das Einlesen von Grunddateien mit SRCH.EXE und Exportieren mit beliebigen Parametern, u.U. verbunden mit dem Selektieren von Sätzen mittels eines Suchbegriffs. Mit FLEX geht das auch!
Verarbeitung einer Grunddatei xyz.alg oder auch einer Externdatei xyz.adt mit Selektion per RegEx und Export der zutreffenden Sätze geht so:
var "-d dateiname -E exportdatei -e exportparameter -s suchbegriff"
Aufruf des Unterprogramms :expi, Rückkehr: in iV steht evtl. eine Fehlermeldung
in iZ steht Zahl der verarb. Sätze
perf expi
if Z<1 mes;end
In der Datei exportdatei stehen nun die exportierten Sätze - sonst passiert nichts!
(wenn exportdatei mit + beginnt, werden die Sätze angehängt)
weitere Befehle... am Ende dann:
include expi.inc
Beispiel 6:
RegEx-Suche in ausgewählten Textdateien geht so:
X grep suchbegriff dateinamensmuster
Ausgegeben werden dann die Namen der Dateien, in denen der suchbegriff gefunden wurde, und darunter jeweils die Zeilen mit Nummer, in denen er enthalten ist.
Wahlweise kann man auch mit der Option -l verlangen, daß nur die Dateinamen gezeigt werden:
X grep -l suchbegriff dateinamensmuster
Versuchen Sie als Beispiel:
X grep -l unicode c:\allegro\help\*.rtf
Der StandardFLEX xgrep.flx bietet zuerst die Auswahl der Dateitypen. Will man ausdrücklich die Verlautbarungen durchsuchen, kann man so starten:
X xgrep vb*