RosettaCodeData/Task/Soundex/FutureBasic/soundex.futurebasic

172 lines
3.9 KiB
Plaintext

include "ConsoleWindow"
def tab 12
_soundexNil$ = "0000"
local mode
local fn Soundex( codeWord as Str255 ) as Str255
dim as long i,u
dim as unsigned char charCode,lastCode
dim as Str31 outputStr
outputStr = _soundexNil$
if codeWord[0] = _nil then exit fn
UppercaseStripDiacritics( @codeWord[1], codeWord[0], _smCurrentScript )
outputStr[1] = codeWord[1]
charCode = outputStr[1] : gosub "getSoundexCode"
lastCode = charCode
i = 1 : u = 1
while i <= codeWord[0]
i++ : charCode = codeWord[i] : gosub "getSoundexCode"
if charCode > 0 and lastCode <> charCode
u++ : outputStr[u] = charCode
if u = 4 then exit while
end if
lastCode = charCode
wend
exit fn
"getSoundexCode"
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
return
end fn = outputStr
dim as Str255 nameStr, testName(100)
dim as long i
testName(0) = "Smith "
testName(1) = "Johnson "
testName(2) = "Williams "
testName(3) = "Jones "
testName(4) = "Brown "
testName(5) = "Davis "
testName(6) = "Miller "
testName(7) = "Wilson "
testName(8) = "Moore "
testName(9) = "Taylor "
testName(10) = "Anderson "
testName(11) = "Thomas "
testName(12) = "Jackson "
testName(13) = "White "
testName(14) = "Harris "
testName(15) = "Martin "
testName(16) = "Thompson "
testName(17) = "Garcia "
testName(18) = "Martinez "
testName(19) = "Robinson "
testName(20) = "Clark "
testName(21) = "Rodriguez "
testName(22) = "Lewis "
testName(23) = "Lee "
testName(24) = "Walker "
testName(25) = "Hall "
testName(26) = "Allen "
testName(27) = "Young "
testName(28) = "Hernandez "
testName(29) = "King "
testName(30) = "Wright "
testName(31) = "Lopez "
testName(32) = "Hill "
testName(33) = "Scott "
testName(34) = "Green "
testName(35) = "Adams "
testName(36) = "Baker "
testName(37) = "Gonzalez "
testName(38) = "Nelson "
testName(39) = "Carter "
testName(40) = "Mitchell "
testName(41) = "Perez "
testName(42) = "Roberts "
testName(43) = "Turner "
testName(44) = "Phillips "
testName(45) = "Campbell "
testName(46) = "Parker "
testName(47) = "Evans "
testName(48) = "Edwards "
testName(49) = "Collins "
testName(50) = "Stewart "
testName(51) = "Sanchez "
testName(52) = "Morris "
testName(53) = "Rogers "
testName(54) = "Reed "
testName(55) = "Cook "
testName(56) = "Morgan "
testName(57) = "Bell "
testName(58) = "Murphy "
testName(59) = "Bailey "
testName(60) = "Rivera "
testName(61) = "Cooper "
testName(62) = "Richardson "
testName(63) = "Cox "
testName(64) = "Howard "
testName(65) = "Ward "
testName(66) = "Torres "
testName(67) = "Peterson "
testName(68) = "Gray "
testName(69) = "Ramirez "
testName(70) = "James "
testName(71) = "Watson "
testName(72) = "Brooks "
testName(73) = "Kelly "
testName(74) = "Sanders "
testName(75) = "Price "
testName(76) = "Bennett "
testName(77) = "Wood "
testName(78) = "Barnes "
testName(79) = "Ross "
testName(80) = "Henderson "
testName(81) = "Coleman "
testName(82) = "Jenkins "
testName(83) = "Perry "
testName(84) = "Powell "
testName(85) = "Long "
testName(86) = "Patterson "
testName(87) = "Hughes "
testName(88) = "Flores "
testName(89) = "Washington "
testName(90) = "Butler "
testName(91) = "Simmons "
testName(92) = "Foster "
testName(93) = "Gonzales "
testName(94) = "Bryant "
testName(95) = "Alexander "
testName(96) = "Russell "
testName(97) = "Griffin "
testName(98) = "Diaz "
testName(99) = "Hayes "
print "Soundex codes for 100 popular American surnames:"
for i = 0 to 99
nameStr = testName(i)
print nameStr, "= "; fn Soundex( nameStr )
next
print
print "Soundex codes for similar sounding names:"
print " Stuart = "; fn Soundex( "Stuart" )
print "Stewart = "; fn Soundex( "Stewart" )
print "Steward = "; fn Soundex( "Steward" )
print " Seward = "; fn Soundex( "Seward" )