Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: St am 27.03.14 - 12:51:30

Titel: Texterkennung im Subject und Body
Beitrag von: St am 27.03.14 - 12:51:30
Hallo zusammen,

ich hoffe ihr könnt mir zu folgender Fragestellung behilflich sein.

Es sollen bei eingehenden Mails innerhalb eines bestimmten Accounts die Mailinhalte (Subject & Body) nach einer 11-stelligen Nummer geprüft werden.

Die 11-stellige Nummer muss anschließend noch auf Anfangsziffern etc. geprüft werden, was aber kein Problem ist (sprich fängt sie z.b. mit einer 200 oder 3000 oder 7000 an).

Wie sollte man am Besten bei der Filterung nach der Nummer vorgehen, also bei der Prüfung, ob in der Mail eine 11-stellige Nummer vorhanden ist?

Gruß
Stephan

Titel: Re: Texterkennung im Subject und Body
Beitrag von: Tode am 27.03.14 - 13:13:11
Da Body ein richtext- feld ist, geht das nicht in einer Ansicht, sondern muss mit einem Agenten gemacht werden... In Formel könnte man z.B. mit @Matches arbeiten, muss aber Body vorher mit @text(Body) oder @Abstract(Body;...) umwandeln... In LotusScript gibt es ähnliche Methoden
Titel: Re: Texterkennung im Subject und Body
Beitrag von: St am 27.03.14 - 13:21:57
Die Prüfung würde schon per Agent erfolgen und nicht über eine Ansicht.
Schon mal danke für den Hinweis mit der Umwandlung  :)
Titel: Re: Texterkennung im Subject und Body
Beitrag von: Mitch am 27.03.14 - 13:22:32
Huhu,

genau. @Matches bzw. "Like" in LotusScript. Da kannst du einen Ausdruck definieren nach dem gesucht wird. Damit kannst du zumindest herausfinden ob eine solche Nummer drin ist (z.B. *###########* - geht bestimmt auch cooler).

Das Bestimmen der Nummer wird dann schwieriger. Eventuell den Text an allen Leerstellen splitten und dann die einzelnen Elemente durchlaufen und mit einem genaueren Ausdruck prüfen. Wäre aber blöd wenn die Nummer dann z.B. so geschrieben wäre: "Die tolle Nummer:123456789000". Oder sonstwie mit anderen Zeichen verbunden wäre. Also mehr Trennzeichen festlegen. Aber alle wird man schwer hinbekommen.

Man könnte natürlich auch Schritt für Schritt durchlaufen: Ziehe Zeichen 1 bis 11. Prüfe ob Nummer. Nein? Dann ziehe Zeichen 2 bis 12. Prüfe ob Nummer. Nein? Was ist mit 3 bis 13? Und so weiter.

Problem bei beiden: Was ist wenn mehrere 11stellige Nummern drin sind? :)

Also: Wenn die Mails kein festes Format haben, kann man IMHO bestenfalls raten. Je nach Anwendungsfall kann "geraten" aber auch ausreichen.

Gruß,

Mitch
Titel: Re: Texterkennung im Subject und Body
Beitrag von: Mitch am 27.03.14 - 13:27:54
Ergänzung:

Wenn du die gesamte Nummer gar nicht brauchst, also nur die Prüfung auf die Anfangsziffern machen willst, dann kannst du ja ausschließlich mit @Matches bzw. Like arbeiten, in der Art von:

Code
If txt Like "*200########*" Then
...
ElseIf txt Like "*7000#######*" Then
...
End If

Dann kann man sich das ganze Gefummel zur Nummernbestimmung sparen. Problematisch bleibt trotzdem der Fall mit mehreren Nummern im Text. :)
Titel: Re: Texterkennung im Subject und Body
Beitrag von: St am 27.03.14 - 13:33:07
Hi Mitch, super Hinweis, danke.

Ich gebe dir Recht, das es Problematisch wird, wenn mehrere Nummern enthalten sind, aber in der Regel wird die Nummer zumindest im Body nur einmal vorhanden sein.

Ggfs. ist sie einmal im Subject und nochmal im Body-Feld. Es geht hier um Schadennummern und somit eher einmalig.

Es soll auch nur zur "Vorsortierung" dienen und bei den Mails, bei denen mehrere und vorallem unterschiedliche (von der Syntax passende) Nummern enthalten sind, sollen in einen bestimmten Ordner sortiert und von einem Sachbearbeiter dann manuell weiterbearbeitet werden.

Es sicher auch nicht jeder Fall zu 100% abgedeckt werden, aber das ist auch nicht das Ziel  ;D
Titel: Re: Texterkennung im Subject und Body
Beitrag von: Tode am 27.03.14 - 13:58:20
Das finden der Nummer ist aber mit dem richtigen Ansatz in wenigen Zeilen code erledigt...

Zuerst mal die Formel:
Code
_source := @Text( Body ); 
_unwanted := @Explode( _source  ; "0123456789" );
_cleanBody := @ReplaceSubstring( _source ; _unwanted ; " " );
_allNumbers := @Trim( @Explode( _cleanBody ; " " ) );
@For( i := 1; i <= @Elements( _allNumbers ); i := i + 1;
    _found := @If( @Length( _alNumbers[i] ) = 11 ; _allNumbers[i] ; "" )
)
_found

Die Erklärung folgt, wenn jemand den eigentlich simplen Code nicht verstehen sollte...
Titel: Re: Texterkennung im Subject und Body
Beitrag von: ascabg am 27.03.14 - 14:04:36
Hallo,

@Tode
Eine kleine Frage zu Deinem Beispiel.

Muesste man nicht innerhalb der For-Schleife bei "_alNumbers" die "eckigen" Klammern verwenden?


Andreas
Titel: Re: Texterkennung im Subject und Body
Beitrag von: Tode am 27.03.14 - 14:11:39
ja, hast recht... war nur aus dem Kopf getippt... habs korrigiert
Titel: Re: Texterkennung im Subject und Body
Beitrag von: St am 27.03.14 - 14:29:05
Hi Tode,

die paar Code-Zeilen funktionieren prima, vielen Dank  ;)

Bei den LotusScript-Beispiel prüft der Like - Befehl nicht die Anzahl von Characters, kann das sein?

Bei z.B. Like "*200########*" trifft dieser auch bei mehr als 11 Ziffern, ansonsten wäre das auch ein prima Lösungsansatz.
Titel: Re: Texterkennung im Subject und Body
Beitrag von: ascabg am 27.03.14 - 15:10:40
Hallo,

Und wenn Di bei
Code
Like "*200########*"
einfach mal die "*" weglaesst.

Sollte dann eigentlich bedeuten, finde alles was mit 200 anfaengt und mit 8-Ziffern weitergeht


Andreas
Titel: Re: Texterkennung im Subject und Body
Beitrag von: St am 27.03.14 - 15:15:08
Das hatte ich schon probiert und dann wird die Zahl leider gar nicht mehr erkannt.
Titel: Re: Texterkennung im Subject und Body
Beitrag von: ascabg am 27.03.14 - 15:19:21
Und mit

Code
Like "[0-9][0-9][0-9]########"


Andreas
Titel: Re: Texterkennung im Subject und Body
Beitrag von: St am 27.03.14 - 16:00:14
geht auch nicht ???
Titel: Re: Texterkennung im Subject und Body
Beitrag von: ascabg am 27.03.14 - 16:06:51
Jetzt muss ich aber mal ganz dumm nachfragen.

Bewegen wir uns jetzt auf dem Gebiet der @-Formeln oder befinden wir und bereits
in Lotus Script?
Weil bei Script haette ich gesagt, lass den Code doch mal im Debugger laufen.

Andreas
Titel: Re: Texterkennung im Subject und Body
Beitrag von: St am 28.03.14 - 08:21:51
Ich bin dabei es in Script umzusetzen, da man bei der Weiterverarbeitung flexibler ist als mit Formelsprache. Der Debugger hilft nicht wirklich, da die If-Abfrage einfach nicht zieht.
Titel: Re: Texterkennung im Subject und Body
Beitrag von: ascabg am 28.03.14 - 08:24:57
Aber Du kannst Dir im Debugger den Inhalt der Variablen ansehen.

Und was heisst "... nicht zieht ..."

Eventuell bringt es ja auch ein wenig, wenn Du Dein bisheriges Script einmal hier
postest. Mag sein, dass jemandem sofort etwas ins Auge sticht, warum es nicht so
funktioniert wie Du es gern moechtest.


Andreas
Titel: Re: Texterkennung im Subject und Body
Beitrag von: Andrew Harder am 28.03.14 - 08:40:33
Die neue Anforderung, das nach der Zahl keine weitere Zahl mehr kommen soll, dürfte so abgefangen werden können:
Like "*200########[!#]*"
Titel: Re: Texterkennung im Subject und Body
Beitrag von: St am 28.03.14 - 08:52:49
geht leider auch nicht.

Der Code sieht an der Stelle aktuell (mit eurer Hilfe  ;D) wie folgt aus:

........
   searchText = body.GetFormattedText( False , 0 )   
   
   If searchText Like "*200########[!#]*" Then   
      MsgBox "Sach"
   ElseIf searchText Like "*3000#######*" Then
      MsgBox "Kraftfahrt"
   ElseIf searchText Like "*400########*" Then
      MsgBox "Haftpflicht"
.........

Es werden in der der ersten Abfrage "alle" Zahlen mit "mindestens" 11 Stellen erkannt. Das ist auf jeden Fall schon mal die halbe Miete, denn alles unter 11 Stellen interessiert nicht.

Aber am Besten ist es wenn ausschließlich 11 stellige Zahlen erkannt werden.

Wenn es über den Like-Befehl nicht klappt, könnte man doch eventuell über ein Evaluate & @Matches was versuchen.

Ich würde es gerne mit Script umsetzen, da bei der weiteren Verarbeitung Mails inkl. Anhänge versendet werden müssen und das mit Script wesentlich einfacher ist.
Titel: Re: Texterkennung im Subject und Body
Beitrag von: Tode am 28.03.14 - 08:59:52
Mein Code kommt vollkommen ohne @Matches aus... und lässt sich leicht (wenn auch nicht so komfortabel, weil das Script- Explode bei "0123456789" anders reagiert) in LotusScript umsetzen...
Titel: Re: Texterkennung im Subject und Body
Beitrag von: St am 28.03.14 - 09:30:46
so geht es zumindest:

........
        delim = " "
   searchText = body.GetFormattedText( False , 0 )
   tmpArr = FullTrim( Split( searchText, delim))

   Dim i As Integer, tmpVar As String
   
   For i = 0 To UBound( tmpArr)
      tmpVar = tmpArr(i)
      If tmpVar Like "*#*" Then
         Print Len(tmpVar)
         If Len(tmpVar) = 11 Then
            MsgBox "11 Stellig"
         End If
      End If       
   Next
........
Titel: Re: Texterkennung im Subject und Body
Beitrag von: St am 28.03.14 - 09:55:14
Danke für eure Unterstützung  :D
Titel: Re: Texterkennung im Subject und Body
Beitrag von: Mitch am 28.03.14 - 10:12:16
In der Variante findest du zuviel. Zum Beispiel fällt "A123456789B" auch da drunter. Oder "Nr.:1234567".

Todes Ansatz ist ziemlich cool (auch wenn er so nicht ohne Anpassungen funktioniert). Da würde ich mich an deiner Stelle dran orientieren und es in Skript umsetzen. Also erst eine "negative Liste" erstellen wo alles raus ist was du später haben willst (die Ziffern) und dann alles aus der negativen Liste im Original entfernen. So bleiben nur Zahlen übrig. Da musst du dann nur noch die 11stelligen raus filtern. ;)

Gruß,

Mitch
Titel: Re: Texterkennung im Subject und Body
Beitrag von: St am 28.03.14 - 11:53:58
Stimmt Mitch, habe ich gar nicht dran gedacht.

Habe es jetzt entsprechend umgewandelt und klappt prima.  Über die Negativ-Listen sortiere ich alles aus, so dass nur die Zahlen übrig bleiben und arbeite mit denen weiter.

Perfekt!

Danke für eure Hilfe!