Autor Thema: Zeichenkette / Fließtext und Mustererkennung  (Gelesen 2709 mal)

y20frank

  • Gast
Zeichenkette / Fließtext und Mustererkennung
« am: 01.03.07 - 12:30:18 »
Hallo zusammen,

ich bin auf der Suche nach einer Lösung, wie man eine Zeichenkette oder einen Fließtext nach einem bestimmten Suchmuster durchsuchen kann.

Konkret: Mails von Kunden (Fragen zur Rechnung etc.) sollen im Feld "Subject" und "Body" nach einer ggf. im Text vorkommenden Rechnungsnummer durchsucht werden. Diese ist zwar vom Format her "fix" (mit '0' beginnend, neunstellig, numerisch, ohne Leer- oder Sonderzeichen => Beispiel: 058711112), aber man kennt ja die Kunden... die haben so ihre eigene Schreibweise, z. B. 058-711-112 oder 058.711.112 oder 058 711 112 oder oder oder.
Als "Feature" können sogar mehrere Rechnungsnummern in einer Mail stehen, die sollen dann in ein Array überführt werden, aber das steht hier nicht zur Diskussion... ;-)

Gibt es irgendwie erstmal eine Möglichkeit, die genannten Felder per Script oder Formel zu durchsuchen und die Rechnungsnummer in einer Variablen zu "isolieren"... Meinen ersten Ansatz (siehe unten) habe ich mal mit dem Like-Operator versucht. Wäre das der richtige Weg oder habt ihr ggf. noch andere Lösungsansätze?
Mit einer 100% Trefferquote rechne ich allerdings nicht, hoffe nur die "Masse" damit abdecken zu können.

Code
check = uidoc.FieldGetText("Subject")
If check Like "###*###*###" Then 
Call uidoc.FieldSetText("Ergebnis", "Treffer!")
End If

Danke und Gruß
Frank
« Letzte Änderung: 01.03.07 - 12:33:50 von y20frank »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Zeichenkette / Fließtext und Mustererkennung
« Antwort #1 am: 01.03.07 - 12:38:55 »
Ich würde den Text erstmal "normieren" und alle Zeichen ungleich (0..9) eliminieren (okay, Buchstaben sollte man vielleicht drin lassen, damit man erkennt, wo eine Nummer anfängt und wieder aufhört.

Ich habe sowas mal für Telefonnummern gemacht, die auch sehr individuell gespeichert werden konnten ("+49 (0) 172 ...." oder auch "Privat: 089 ....")

Bernhard

y20frank

  • Gast
Re: Zeichenkette / Fließtext und Mustererkennung
« Antwort #2 am: 01.03.07 - 12:56:46 »
Hm, das hört sich von der Vorgehensweise gut an... Ich habe mir auch schon gedacht, dass ich erstmal alle Zahlen von den Buchstaben heraus trenne... aber dann habe ich da ja ggf. auch Telefonnummern oder Zahlungsbeträge mit enthalten. Grundsätzlich muss geprüft werden, ob 9 Zahlen in einer Reihenfolge vorhanden sind (ggf. mit den genannten Sonderzeichen)... OK, ne kurze Telefonnumemr kann das im Prinzip ja dann auch sein, aber wenn die neun Stellen "isoliert" sind läuft darüber sowieso noch eine Prüfziffernberechnung, denn die ReNr. sind nicht "einfach" fortlaufend.

Du hast nicht zufällig einen kleinen Code-Schnipsel von der Telefongeschichte übrig...?! ::)

Gruß
Frank

y20frank

  • Gast
Re: Zeichenkette / Fließtext und Mustererkennung
« Antwort #3 am: 01.03.07 - 13:35:39 »
Okay... bis jetzt habe ich den folgenden Code... zuerst wird überhaupt mal mit Like *###* geprüft, ob das Suchmuster im Text vorkommt, dann werden die Zahlen nach und nach in einen String geschrieben. Ist er neunstellig (wie die Rechnungsnummer sein sollte), wird diese in ein Array geschrieben und später noch auf Plausibilität und Bestand geprüft.

   
Code
	treffer = 0	' Flag für gefundene Zeichenkette
	k = 0 		' Zähler Array ReNr von Kunde
	
	subject = doc.GetItemValue("Subject")
	body = doc.GetItemValue("Body")
	check = subject(0) & body(0)
	If check Like "?###*###*###*" Then
		treffer = 1
	End If
	
	If treffer = 1 Then
		Dim kazArray() As String
		For i = 1 To Len(check)
			cchar = Mid(check, i, 1)
			If cchar Like "[0123456789]" Then	' Nummer gefunden. 
				tchar = tchar & cchar
				If Len(tchar) = 9 Then
					Print tchar & "< Treffer!"
					Redim Preserve kazArray(k)
					kazArray(k) = tchar
					k = k + 1					
					tchar = ""
				End If
			End If
		Next		
	End If
	
	' --- Alle gesammelten Nummern auf Plausibilität prüfen
	If treffer = 1 And k > 0 Then
	' Plausiprüfungen:
	' 1) Nummernkreis
	' 2) Prüfziffer
	' 3) Bestand (Indexdaten-GA) = zusätzliche Prüfung
		For i = 0 To Ubound(kazArray)
			Print kazArray(i)
		Next
	End If

Hm... ob das ein g'scheiter Ansatz sein mag...?! Mal schau'n.

Gruß
Frank
« Letzte Änderung: 01.03.07 - 21:41:43 von y20frank »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Zeichenkette / Fließtext und Mustererkennung
« Antwort #4 am: 01.03.07 - 17:34:02 »
Das ist schon ein Ansatz. Allerdings würde ich das "Umfeld" Deiner 9-character-number-strings überwachen: Sonst schlägt der bei einem Subject wie
"Und hier - wie versprochen - noch die Replica-ID: 85256CA9:BA056A2E eom"
auch zu.

Bernhard

y20frank

  • Gast
Re: Zeichenkette / Fließtext und Mustererkennung
« Antwort #5 am: 01.03.07 - 21:37:02 »
Danke für die Einschätzung!  :)

Das von Dir besagte "Umfeld" wird ja noch von der Plausibilitätsprüfung, die bereits seit Jahren sich in ScriptLib anderer DBs bewährt hat, überwacht (u.a. Modula-11-Prüfung usw.). Nur gültige ReNummern würden daher "erkannt" bzw aus dem Array weiter verarbeitet. Sicher, der Zufall mag auch dann noch die ein oder andere Nummer durchgehen lassen, am Ende wacht jedoch immer noch der User über diese und kann sagen: "Ne, so nit!"
OK, hier ist die Fehlerquelle zwar wieder mal 'der-die-das-User-Umfeld', aber er-sie-es bekommt zumindest aus einem Fluß aus Mail-Text schon mal ein paar Vorschlagwerte, die er-sie-es dann bestätigen oder korrigieren kann (natürlich wieder mit entsprechender Plausi)...

Gruß
Frank
« Letzte Änderung: 01.03.07 - 21:43:30 von y20frank »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz