87 lines
3.0 KiB
Plaintext
87 lines
3.0 KiB
Plaintext
include "NSLog.incl"
|
|
|
|
local fn SoundexCode( charCode as unsigned char ) as unsigned char
|
|
select charCode
|
|
case _"B", _"F", _"P", _"V"
|
|
charCode = _"1"
|
|
case _"C", _"G", _"J", _"K", _"Q", _"S", _"X", _"Z"
|
|
charCode = _"2"
|
|
case _"D", _"T"
|
|
charCode = _"3"
|
|
case _"L"
|
|
charCode = _"4"
|
|
case _"M", _"N"
|
|
charCode = _"5"
|
|
case _"R"
|
|
charCode = _"6"
|
|
case else
|
|
charCode = 0
|
|
end select
|
|
end fn = charCode
|
|
|
|
local fn SoundexCodeForWord( codeWord as CFStringRef ) as CFStringRef
|
|
NSUInteger i
|
|
unsigned char charCode, lastCode
|
|
CFStringRef outputStr = @"0000"
|
|
CFMutableStringRef tempStr
|
|
|
|
if ( len(codeWord) == 0 ) then exit fn
|
|
|
|
tempStr = fn MutableStringWithCapacity(0)
|
|
codeWord = ucase(fn StringByApplyingTransform( codeWord, NSStringTransformStripDiacritics, NO ))
|
|
|
|
MutableStringAppendString( tempStr, left(codeWord,1) )
|
|
charCode = fn StringCharacterAtIndex( codeWord, 0 )
|
|
charCode = fn SoundexCode( charCode )
|
|
lastCode = charCode
|
|
i = 0
|
|
while i < len(codeWord) - 1
|
|
i++
|
|
charCode = fn StringCharacterAtIndex( codeWord, i )
|
|
charCode = fn SoundexCode( charCode )
|
|
if ( charCode > 0 and lastCode != charCode )
|
|
MutableStringAppendString( tempStr, fn StringWithFormat( @"%c",charCode ) )
|
|
if ( len(tempStr) == 4 ) then break
|
|
end if
|
|
lastCode = charCode
|
|
wend
|
|
|
|
while ( len(tempStr) < 4 )
|
|
MutableStringAppendString( tempStr, @"0" )
|
|
wend
|
|
|
|
outputStr = fn StringWithString( tempStr )
|
|
end fn = outputStr
|
|
|
|
CFArrayRef names
|
|
CFStringRef name
|
|
|
|
names = @[
|
|
@"Smith",@"Johnson",@"Williams",@"Jones",@"Brown",@"Davis",@"Miller",@"Wilson",@"Moore",@"Taylor",
|
|
@"Anderson",@"Thomas",@"Jackson",@"White",@"Harris",@"Martin",@"Thompson",@"Garcia",@"Martinez",@"Robinson",
|
|
@"Clark",@"Rodriguez",@"Lewis",@"Lee",@"Walker",@"Hall",@"Allen",@"Young",@"Hernandez",@"King",
|
|
@"Wright",@"Lopez",@"Hill",@"Scott",@"Green",@"Adams",@"Baker",@"Gonzalez",@"Nelson",@"Carter",
|
|
@"Mitchell",@"Perez",@"Roberts",@"Turner",@"Phillips",@"Campbell",@"Parker",@"Evans",@"Edwards",@"Collins",
|
|
@"Stewart",@"Sanchez",@"Morris",@"Rogers",@"Reed",@"Cook",@"Morgan",@"Bell",@"Murphy",@"Bailey",
|
|
@"Rivera",@"Cooper",@"Richardson",@"Cox",@"Howard",@"Ward",@"Torres",@"Peterson",@"Gray",@"Ramirez",
|
|
@"James",@"Watson",@"Brooks",@"Kelly",@"Sanders",@"Price",@"Bennett",@"Wood",@"Barnes",@"Ross",
|
|
@"Henderson",@"Coleman",@"Jenkins",@"Perry",@"Powell",@"Long",@"Patterson",@"Hughes",@"Flores",@"Washington",
|
|
@"Butler",@"Simmons",@"Foster",@"Gonzales",@"Bryant",@"Alexander",@"Russell",@"Griffin",@"Diaz",@"Hayes"
|
|
]
|
|
|
|
NSLogSetTabInterval( 80 )
|
|
NSLog( @"Soundex codes for %ld popular American surnames:",fn ArrayCount(names) )
|
|
for name in names
|
|
NSLog( @"%@\t= %@",name,fn SoundexCodeForWord(name) )
|
|
next
|
|
|
|
NSLog(@"")
|
|
|
|
NSLog( @"Soundex codes for similar sounding names:" )
|
|
NSLog( @"Stuart\t= %@" , fn SoundexCodeForWord( @"Stuart" ) )
|
|
NSLog( @"Stewart\t= %@", fn SoundexCodeForWord( @"Stewart" ) )
|
|
NSLog( @"Steward\t= %@", fn SoundexCodeForWord( @"Steward" ) )
|
|
NSLog( @"Seward\t= %@" , fn SoundexCodeForWord( @"Seward" ) )
|
|
|
|
HandleEvents
|