Robert L. Stewart
rl_stewart at highstream.net
Wed Oct 22 11:00:23 CDT 2003
List, Here are the functions required: Function Soundex(ByVal strIn As String) As String ' Create a Soundex lookup string for the ' input text. ' Parameters: ' strIn: ' The text to encode ' Returns: ' Return value: ' strIn, converted to Soundex format. ' Other Functions Required: ' IsCharAlpha ' PadRight Dim strOut As String Dim intI As Integer Dim intPrev As Integer Dim strChar As String * 1 Dim intChar As Integer Dim fPrevSeparator As Boolean strOut = "" strIn = UCase(strIn) fPrevSeparator = True strOut = Left$(strIn, 1) For intI = 2 To Len(strIn) ' If the output string is full, quit now. If Len(strOut) >= intLen Then Exit For End If ' Get each character, in turn. If the ' character's a letter, handle it. strChar = Mid$(strIn, intI, 1) If IsCharAlpha(strChar) Then ' Convert the character to its code. intChar = CharCode(strChar) ' If the character's not empty, and if it's not ' the same as the previous character, tack it ' onto the end of the string. If (intChar > 0) Then If fPrevSeparator Or (intChar <> intPrev) Then strOut = strOut & intChar intPrev = intChar End If End If fPrevSeparator = (intChar = 0) End If Next intI ' Return the string, right padded with 0's. Soundex = PadRight(strOut, intLen, "0") End Function Private Function CharCode(strChar As String) As Integer Select Case strChar Case "A", "E", "I", "O", "U", "Y" CharCode = 0 Case "C", "G", "J", "K", "Q", "S", "X", "Z" CharCode = 2 Case "D", "T" CharCode = 3 Case "M", "N" CharCode = 5 Case "B", "F", "P", "V" CharCode = 1 Case "L" CharCode = 4 Case "R" CharCode = 6 Case Else CharCode = -1 End Select End Function Function IsCharAlpha(strText As String) As Boolean ' Is the first character of strText an alphabetic character? ' Parameters: ' strText: ' Text to check. Only first character will be examined. ' Returns: ' Return Value: ' True if first character of strText is alphabetic in ' the current locale. ' Example: ' If IsCharAlpha(strSomeValue) Then ' ' you know the first character is alphabetic. ' End If ' Other Functions Required: ' IsCharsetWide ' Other Functions Using This One: ' Soundex ' IsCharNumeric If IsCharsetWide() Then IsCharAlpha = CBool(IsCharAlphaW(AscW(strText))) Else IsCharAlpha = CBool(IsCharAlphaA(Asc(strText))) End If End Function Function SoundsLike(ByVal strItem1 As String, ByVal strItem2 As String, _ Optional fIsSoundex As Boolean = False) As Integer ' Return a number between 0 and 4 (4 being the best) indicating ' the similarity between the Soundex representation for ' two strings. ' Other Functions Required: ' Soundex ' Parameters: ' strItem1 , strItem2: ' Strings to compare ' fIsSoundex (Optional, default False): ' Are the strings already in Soundex format? ' Returns: ' Return Value: ' Integer between 0 (not similar) and intLen (very similar) indicating ' the similarity in the Soundex representation of the two strings. ' Note: ' This code is extremely low-tech. Don't laugh! It just compares ' the two Soundex strings until it doesn't find a match, and returns ' the position where the two diverged. ' Remember, two Soundex strings are completely different if the ' original words start with different characters. That is, this ' function always returns 0 unless the two words begin with the ' same character. Dim intI As Integer If Not fIsSoundex Then strItem1 = Soundex(strItem1) strItem2 = Soundex(strItem2) End If For intI = 1 To intLen If Mid$(strItem1, intI, 1) <> Mid$(strItem2, intI, 1) Then Exit For End If Next intI SoundsLike = (intI - 1) End Function At 08:45 AM 10/22/2003 -0500, you wrote: >Date: Wed, 22 Oct 2003 05:24:18 -0400 >From: "Bryan Carbonnell" <carbonnb at sympatico.ca> >Subject: RE: [AccessD] "fuzzy logic" search >To: Access Developers discussion and problem solving > <accessd at databaseadvisors.com> >Message-ID: <3F961482.29626.108D43 at localhost> >Content-Type: text/plain; charset=US-ASCII > >On 21 Oct 2003 at 20:32, John Colby wrote: > > > Hmmm soundex would be good though. Do you have this function? Is it > > a class, a single function? How does it work? > >ADH has a Soundex Version. I don't recall if it's a single procedure >or a series of procedures. I don't think it's a class though. > >-- >Bryan Carbonnell - carbonnb at sympatico.ca >RAM Disk is not an installation technique!