Kennen Sie das? Sie suchen anhand eines Namens nach einer Adresse in Ihrer Adress-Datenbank. Doch irgendwie finden Sie die Adresse nicht. Gesucht wurde nach dem Namen Schmitt - leider ohne Erfolg! Warum? Vielleicht schreibts sich der Name ja auch Schmidt oder Schmid. Also erneute suchen: Diesmal nach Schmidt - wieder kein Erfolg. Nun gut, es gibt ja auch noch Schmid - Volltreffer! Leider wurden jetzt aber drei Suchvorgänge benötigt - alles kostbare Zeit, von der man meist nur wenig hat. Irgendwie wünscht man sich, dass automatisch nach ähnlich klingenden Namen gesucht werden könnte. Dann würden in der Eregbnisliste alle Schmitts, Schmidts und Schmids stehen und man bräuchte nur den gesuchten Eintrag anklicken. Ein Algorithmus muss her - und zwar einer, der die Namen so umsetzt, dass eben auch ähnlichklingende Namen gefunden werden. Und hier ist er - der SoundEx-Algorithmus: Public Class SoundEx ' Originalstring Private m_Name As String = "" Public Sub New(ByVal sName As String) m_Name = sName End Sub ' SoundEx-Code zurückgeben Public ReadOnly Property [Get]() As String Get Return GetSoundEx(m_Name) End Get End Property ' SoundEx-Code erzeugen Public Shared Function GetSoundEx(ByVal sName As String) As String If sName.Length = 0 Then Return "" ' Originalstring in Großbuchstaben umwandeln ' und ß nach SS umwandeln sName = sName.ToUpper.Replace("ß", "SS") ' 1. Buchstabe Dim sCode As String = sName.Substring(0, 1) Dim sNumber As String = "" ' jedem weiteren Buchstaben wird nun ein ' numerischer Wert zugewiesen For i As Integer = 1 To sName.Length - 1 Select Case sName.Substring(i, 1) Case "B", "F", "P", "V" sNumber = "1" Case "C", "G", "J", "K", "Q", "S", "X", "Z" sNumber = "2" Case "D", "T" sNumber = "3" Case "L" sNumber = "4" Case "M", "N" sNumber = "5" Case "R" sNumber = "6" ' Alle anderen Buchstaben, Satzzeichen und ' Zahlen werden ignoriert End Select ' numerischen Wert nur verwenden, wenn dieser ' anders ist, als der vorige Wert If sCode.Length = 1 OrElse sCode.EndsWith(sNumber) = False Then sCode &= sNumber End If Next ' SoundEx-Code als Funktionsrückgabewert Return sCode End Function End Class Die SoundEx-Klasse kann wie folgt verwendet werden: Dim sSoundEx As String = SoundEx.GetSoundEx("Name") oder auch so... Dim sSoundEx As String = New SoundEx("Name").Get Welche Ergebnisse liefert der SoundEx-Algorithmus nun bei den Namen "Schmitt", "Schmidt" und "Schmid"?
Wie Sie sehen, liefern alle drei Namen das gleiche SoundEx-Ergebnis. Wie verbindet man nun den SoundEx-Algorithmus mit einer Adress-Datenbank? Dim SQL As String = _ "UPDATE Adressen SET Name = '" & sName & "', " & _ "SoundEx = '" & New SoundEx(strSuch).Get & "' " & _ "WHERE Id = ..." ... Und wenn nun nach einem Namen gesucht wird, suchen Sie einfach (zusätzlich) innerhalb des SoundEx-Feldes: Dim SQL As String = _ "SELECT * FROM Adressen WHERE Name = '" & strSuch & "'" & _ " OR SoundEx = '" & New SoundEx(strSuch).Get & "'" ... Dieser Tipp wurde bereits 13.902 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 ![]() Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats ![]() Dieter Otter Beliebige Zeichen am Anfang und Ende eines Strings entfernen Mit der Trim-Funktion lassen sich nicht nur Leerzeichen, sondern bei Bedarf auch beliebige Zeichen entfernen. sevZIP40 Pro DLL ![]() Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. |
||||||||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |