Und tatsächlich es gibt Befehle, die der MPR kann und die gar nicht in der Hilfe stehen.
Undokumentierte "Geheimbefehle".
Thema in Part III: Wildcard- und Fuzzy-Logic.
****************************
s_fuzzy_compare
****************************
Diese Funktion vergleicht zwei Zeichenketten. Dabei wird ein gradueller Vergleich angewendet, der entweder:
- eine Übereinstimmung von 0% bis 100% zurückliefert (als Zahl 0 bis 100)
- oder (wenn Parameter 3 = "mistakes") die Anzahl der Tippfehler (Mistakes) zwischen den beiden Strings zurückgibt.
Beispiele:
Code: Select all
VAR\$$TXA=MyCommands
VAR\$$TXB=MyCummands
GRN\s_fuzzy_compare|$$TXA|$$TXB|mistakes>$$RES
' $$RES ist nun 1, da sich der Schreiber einmal vertippt hat.
GRN\s_fuzzy_compare|$$TXA|$$TXB>$$RES
' $$RES ist nun 90, da die Übereinstimmung zwischen den beiden Strings 90% beträgt.
s_wildcard_compare
****************************
Texte einfach nach dem Schema "A = B ?" zu vergleichen, erfordert nicht besonders viel Intelligenz.
Oftmals will man wissen, ob Dinge ähnlich sind, oder bestimmte Bestandteile enthalten sind.
Dazu können Wildcards herangezogen werden.
Die Vergleichsfunktion s_wildcard_compare vergleicht einen Wildcard-String (Parameter 1) mit einem zweiten String (Parameter 2).
Das Ergebnis ist 1 (das bedeutet Übereinstimmung) oder 0 (die Strings stimmen nicht überein).
Es gibt drei verschiedene Wildcard-Sets.
Set 1:
------
Als Wildcards werden in diesem Fall primär die zwei Joker-Zeichen aus DOS-Zeiten verwendet.
* - ersetzt beliebige Zeichen
? - ersetzt ein Zeichen
Beispiel:
Code: Select all
VAR\$$TXA="Jan?a*"
VAR\$$TXB="Januar"
GRN\s_wildcard_compare|$$TXA|$$TXB>$$RES
' Man kann in allen Fällen JIZ\ (Jump-If-Zero) verwenden, um das Resultat auszuwerten.
JIZ\$$RES:Label
' $$RES wäre hier 1, da der Vergleich erfolgreich ist. Andernfalls ist das Ergebnis 0.
------
Falls der Zusatz "numeric" (Parameter 3) angegeben wird, dann wird zusätzlich das Zeichen
# - ersetzt eine Ziffer
ausgewertet.
Code: Select all
' der Zusatz "numeric" bewirkt, dass auch das # Zeichen ausgewertet wird.
GRN\s_wildcard_compare|$$TXA|$$TXB|numeric>$$RES
JIZ\$$RES:Label
------
' der Zusatz "all" bewirkt, dass die AGR\-Stringpatterns verwendet werden. Diese sind unten aufgeführt.
Beispiel:
Code: Select all
VAR\$$TXA="{Janner&TOLERANT:&DOCAPS:60}"
GRN\s_wildcard_compare|$$TXA|$$TXB|all>$$RES
JIZ\$$RES:Label
Pattern Abkürzung Beispiel
{&DOCAPS:} {&0:} {&DOCAPS:ExPE} -> Groß-/Kleinschreibung beachten.
{&OR:} {&1:} {Text1&OR:Text2} -> A oder B oder beides
{&XOR:} {&2:} {Text1&XOR:Text2} -> A oder B
{&AND:} {&3:} {Text1&AND:Text2} -> A und B; Reihenfolge beliebig
{&ANDTHEN:} {&4:} {Text1&ANDTHEN:Text2} -> A dann B
{&FUZZY:} {&5:} {{Text1}&FUZZY:[value]} -> ungefähr A
{&TOLERANT:} {&6:} {{Text1}&TOLERANT:[value]} -> A zu min. X%
{&NOT:} {&7:} {&NOT:{Text1}} -> darf nicht vorkommen
{&EXACT:} {&8:} {&EXACT:Text1} -> genau A (Ohne Groß/Klein)
{&NOTEXT:} {&9:} {&9:}
{&t:} -> Always True
{&f:} -> Always False
Alle Pattern können auch mit der Abkürzung verwendet werden, also statt &EXACT: kann man einfach &0: schreiben.
Die einfachen Operatoren (&OR, &XOR, &AND, &ANDTHEN) können beliebig oft wiederholt werden, also
{Text1&OR:Text2&OR:Text3&OR:Text4&OR:Text5... usw.}
ist möglich.
Der &NOT: Operator bezieht sich auf das Nichtvorhandensein von Text; er dient nicht dazu, Pattern-Berechnungen zu negieren. Also
Code: Select all
&NOT:{text1&AND:text2}
Code: Select all
{&NOT:text1}&AND:{&NOT:text2}&AND:{&NOT:text3}
Dies funktioniert mit allen einfachen Operatoren.
Es gibt keine Beschränkung auf 2 Operatoren wie ansonsten bei den WinRobots-Suchmustern, also beispielsweise AFO\(?), STW\ etc. Dadurch sind beliebig viele Internationalisierungen im gleichen Script denkbar.
Das {&EXACT:Text1}-Pattern ersetzt das WinRobots Standard-Suchmuster "Text1&&" (&& am Ende).
Prinzipiell sind auch Verschachtelungen möglich, solange die Klammern korrekt gesetzt werden, also zum Beispiel:
Code: Select all
{{{Text1&ORText2}&ANDTHEN:{Text1&ORText4}}&ANDTHEN:Text2}
Code: Select all
{Text1&FUZZY:5}
Ebenso neu hinzugekommen ist der "&TOLERANT" Operator. Hierbei wird eine %-Zahl angegeben, die die Wortähnlichkeit angibt, ab der der Text der Bedingung entspricht.
Beispiel:
Code: Select all
{text1&TOLERANT:89}
{text1&TOLERANT:&DOCAPS:89}
Code: Select all
{{text1&OR:text2}&TOLERANT:&DOCAPS:89}
Bei allen Operatoren kann jeweils das "&DOCAPS:" verwendet werden. Dadurch wird die jeweilige Klammerebene auf Groß-/Klein-Schrift umgeschaltet, berücksichtigt dann also Groß- und Kleinschreibung.
Aber noch Mal der Hinweis: Die Befehls stehe nicht in der Hilfe und sind derzeit offiziell nicht vorhanden obwohl sie jeder MPR Nutzer sofort nutzen kann. Also dazu ist kein Update nötig die Befehle sind da schon drin und zwar seit Jahren.