If-Abfrage mit Regex für Subject

  • Hallo,

    in The Bat 4.2.9.1 unter Windows 2000 möchte ich in einer Antwort-Vorlage folgende Abfrage haben:

    If Subject enthält "Eilt" (oder "EILT")
    dann setze die Priority auf high
    sonst setze die Priority auf normal

    Mit dem XMP-Plugin habe ich das so hinbekommen:

    Code
    %IF:"XMP_StrCount('%SUBJ','eilt',1)"="0":"%PRIORITY=n":"%PRIORITY=h"

    Das funktioniert auch wunschgemäß - leider nicht in meinen automatisch erzeugten Mails, da werden die XMP-Schnellvorlagen nicht ausgeführt, ich müsste sie sozusagen erst mit Alt Leertaste auslösen.
    Die nur mit internen Makros realisierte geschlechtsspezifische Anrede funktioniert aber in der automatisch erzeugten Mail. Deswegen möchte ich gern diesen Test des Betreffs nur mit den internen Makros formulieren, komme aber mit dem Einbinden des Regex in die Abfrage überhaupt nicht klar. Der reguläre Ausdruck könnte etwa sein:

    Code
    ^(?i)Eilt\b*

    Aber wie binde ich den in die Abfrage ein, an der Stelle, wo jetzt nur REGEX steht?

    Code
    %IF:"%SUBJ"=REGEX:"%PRIORITY=h":"%PRIORITY=n"

    Ich habe mir die spärlichen Hilfetexte zu den Regex-Makros jetzt schon 20-mal durchgelesen, versteh den Sinn aber gar nicht. Könnte mir jemand ein Beispiel für die Syntax geben?

    Der reguläre Ausdruck scheint richtig zu sein. Er soll jeweils den Betreff auswerten, ob er mit "EILT" oder "Eilt" beginnt oder eben nicht.
    Im Tester (http://www.regexe.de/) funktioniert er offenbar, nur wie binde ich ihn ein?

    Gruß
    Lisa

  • Hallo Lisa,

    heute gibt's von mir nur Hilfe zur Selbsthilfe; einfach deshalb weil ich von Regex im Grunde keine Ahnung habe...

    Also, so ein Regex hat meist zwei Teile, im ersten definierst du das Suchmuster, im zweiten wendest du dieses Suchmuster beherzt auf einen String an.
    In deinem Fall wäre das Suchmuster inkl. Makro:

    Code
    %SETPATTREGEXP='^(?i)Eilt\b*'

    Die Anwendung des Musters auf einen Text geschieht mit dem Makro %REGEXPMATCH="". Wenn man das in eine IF-Abfrage baut, müsste sinngemäß(!) etwas in der Art herauskommen:

    Code
    %IF:"%REGEXPMATCH="%OSUBJ"":%PRIORITY=h":"%PRIORITY=n"

    Das Ding funktioniert aber nicht weil ja in obiger IF-Abfrage ja kein Vergleich stattfindet...
    Da müsstest du selbst noch aktiv werden. Dabei helfen dir bestimmt folgende Resourcen:
    http://www.regenechsen.de/phpwcms/index.php?regex_dt_makros

  • Hallo mse,

    danke für die Erklärung. Das hilft mir schon mal weiter. Das erste Makro (SETPATTREGEXP) legt einfach nur fest und braucht gar nicht in die If-Schleife. Dort muss vielmehr eine sinnvolle Abfrage rein, das leuchtet mir ein. Das Tutorial sieht ganz gut aus, das werde ich mir heute nochmal vornehmen. Ich berichte dann, wenn ich's hingekriegt habe.

    Schönes sonniges Wochenende
    Lisa

  • Zitat


    Das funktioniert auch wunschgemäß - leider nicht in meinen automatisch erzeugten Mails, da werden die XMP-Schnellvorlagen nicht ausgeführt, ich müsste sie sozusagen erst mit Alt Leertaste auslösen.


    Wieso? Kannst du die Vorlage nicht mit %INCLUDE oder %QINCLUDE in deine Antwortvorlage einfügen?

  • Hallo Bernd,

    ja, das habe ich auch schon probiert, werden aber nicht ausgeführt. Die mit bordeigenen Makros erstellten IF-Abfragen werden ausgeführt. Alles, was XMP benutzt, wird nicht ausgeführt, egal ob ich es direkt in der Vorlage unterbringe oder als Schnellvorlage abspeichere und mit %QINCLUDE einbinde.

    Der Vollständigkeit halber: Ich habe auch probiert, die gesamte Schnellvorlage mit XMP-Makros als txt-Datei zu speichern und der automatisch erzeugten Mail (also Aufruf mit Kommandozeilenparametern) die Textdatei mitzugeben, gleiches Ergebnis: Die XMP-Makros werden nicht ausgeführt, nur diejenigen, die mit "Bordmitteln" auskommen.

    Heute vormittag hatte ich dann noch eine ganz andere Idee: Ich erzeuge ja die automatischen Mails selbst (mit VBA in Word), unter anderem natürlich auch die auszuwertende Betreff-Zeile. Jetzt werde ich mal in Word eine Textdatei erzeugen, die mit %INCLUDE eingebunden ist und die Anweisungen bereits selbst enthält. Dort setze ich (nach meiner vorherigen VBA-Auswertung) die Priorität (was ja funktioniert) und muss den Betreff dann nicht mehr in TB auswerten. Für die Anlagenliste habe ich das gerade gebaut, da ist die Prioritätsanweisung noch mit unterzubringen.

    Die Attachment-Makros funktionieren nämlich bei den automatisch erzeugten Mails auch nicht, das leuchtet mir auch ein, weil offenbar zuerst der Body erzeugt wird (der das Makro enthält), danach werden erst die Anlagen angefügt (die als ATTACH mitgegeben sind), so dass das Makro sie nicht "sieht". Das betrifft sowohl %ATTACHMENTS als auch das XMP-Makro, das die Attachments einfügt. %ATTACHMENTS schreibt einfach <none> hinein, das XMP-Makro ist eleganter und schreibt gar nichts rein, weil es ja im Moment der Texterzeugung nichts gefunden hat. Leuchtet auch ein.

    So, das will ich jetzt erstmal bauen.
    Aber die Regexe ist nicht vergessen. Ich sehe, dass die Auswertung möglich sein sollte, also bin ich auch entschlossen, das herauszukriegen. Mal sehen, ob das Wochenende reicht ;)

    Gruß
    Lisa

  • Hallo,

    da bin ich wieder, hat mir keine Ruhe gelassen. Es geht so:

    Code
    %SETPATTREGEXP="(?i)^Eilt\b.*$"%-
    %IF:"%SUBJ"="":%-
    "%PRIORITY=N":%-
    "%IF:|%REGEXPMATCH='%SUBJ'|<>|%SUBJ|:|%PRIORITY=N|:|%PRIORITY=H|"


    Falls das mal jemand brauchen kann.

    Gruß
    Lisa

  • Hallo,

    man kann seine eigenen Beiträge offenbar hier nicht editieren, dann hänge ich es halt an:

    Die äußere If-Schleife ist nötig, um den Fall abzufangen, dass der Betreff noch leer (also jungfräulich) ist, sonst würde default die Priorität auf hoch stehen.
    Auch an der Regexe waren noch Änderungen nötig, nachdem ich das Tutorial noch genauer gelesen hatte. Zunächst muss der Schalter (?i) natürlich ganz an den Anfang. Außerdem muss vor dem Stern wenigstens ein Punkt stehen, sonst wird nichts gefunden. Und das Zeilenende $ kann auch nicht schaden.

    Vorschlag für die Erklärung auf TheBat! World
    REGEXPMATCH = "text" ---> sucht in "text" nach dem vorher mit %SETPATTREGEXP festgelegten regulären Ausdruck und fügt den gefundenen Text ein. "text" kann weitere Makros enthalten, z.B. "%SUBJ" für den Betreff der E-Mail oder "%TEXT" für den gesamten Text der E-Mail.

    Gruß
    Lisa

  • Zitat


    man kann seine eigenen Beiträge offenbar hier nicht editieren, dann hänge ich es halt an:

    Innerhalb von 10 Minuten kann man seine Beiträge editieren, dafür existiert in dieser Zeit ein Button.


    Schau mal unter Regeln im Bereich ganz oben ;)

    Einmal editiert, zuletzt von BirgitMaJa (27. September 2009 um 17:04)