Suchen mit "regulären Ausdrücken"  (ab V27)

 

srx suchbegriff       avanti

Suche in dem Text, der momentan in der iV steht, nach dem  suchbegriff

 

Wenn suchbegriff  fehlt, wird der Inhalt der Variablen  #u!!  genommen

 

srX     [dahinter nichts angeben]     avanti

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*