' Manhattan address finder class
' Uses a well known algorithm to determine a cross street for an avenue
' address in Midtown Manhattan NYC.
Class NYCaddress
' declare class-wide variables
Private bSpecial,strAddrNumber,strAddrAvenue,bNeg
Private Sub Class_Initialize
' initialize variables
bSpecial = False
bNeg = False
strAddrNumber = ""
strAddrAvenue = ""
End Sub
Public Property LET AddrNumber(strInput)
' get address # input from user
strAddrNumber = strInput
End Property
Public Property LET AddrAvenue(strInput)
' get avenue name input from user
strAddrAvenue = strInput
End Property
Public Property GET AddrNumber
if isnumeric(strAddrNumber) = False then MakeError( _
"Need a number for the address to continue")
AddrNumber = strAddrNumber
End Property
Private Function MakeError(strErr)
' custom errors
err.raise 1,"Billyboy's Midtown Manhattan NYC Address Finder Class",strErr
End Function
Public Property GET AddrAvenue
AddrAvenue = strAddrAvenue
End Property
Public Function CrossStreet
' default method that performs the algorithm
dim temp1,temp2,temp3
if len(AddrNumber) > 1 then _
temp1 = DropLastDigit(AddrNumber)
temp1 = temp1 / 2
temp2 = AvenueMagicNumber(AddrAvenue,temp1)
temp3 = CalcCrossStreet(temp2,temp1)
CrossStreet = temp3
End Function
Private Function DropLastDigit(strAddressNumber)
' dump the right-most digit of a number
strAddressNumber = left(strAddressNumber, _
int(len(strAddressNumber))-int(1))
DropLastDigit = strAddressNumber
End Function
Private Function FormatStreetExtension(strAddressNumber)
' add the rd to 3 to make 3rd, th to 4 to make 4th etc...
' and then add street so the result looks like: 23rd Street
dim temp,temp2,temp3
temp = right(strAddressNumber,1)
temp3 = right(strAddressNumber,2)
select case temp
case 1
temp2 = "st"
case 2
temp2 = "nd"
case 3
if temp3 = 13 then
temp2 = "th"
else
temp2 = "rd"
end if
case 4,5,6,7,8,9,0
temp2 = "th"
end select
FormatStreetExtension = strAddressNumber & temp2 & " Street"
End Function
Private Function CalcCrossStreet(strMagicNumber,strAddressNumber)
' second half of the algorithm
dim strStreet,strStreetAll
if bSpecial then
if len(strAddressNumber) > 1 then _
strAddressNumber = DropLastDigit(strAddressNumber)
end if
if bNeg then
strStreet = strAddressNumber - strMagicNumber
else
strStreet = strAddressNumber + strMagicNumber
end if
strStreet = formatnumber(strStreet,0)
strStreetAll = formatstreetextension(strStreet)
CalcCrossStreet = strStreetAll
End Function
Private Function AvenueMagicNumber(strAvenueName,strAddressNumber)
' obtain the constant that will help the algorithm locate
' a nearby cross street based on the entered avenue name.
bSpecial = False
bNeg = False
Select Case UCASE(strAvenueName)
Case "AVENUE A","AVENUE B","AVENUE C","AVENUE D", _
"FIRST AVENUE","SECOND AVENUE"
AvenueMagicNumber = 3
Case "THIRD AVENUE","EIGHTH AVENUE"
AvenueMagicNumber = 10
Case "FOURTH AVENUE"
AvenueMagicNumber = 8
Case "FIFTH AVENUE"
if strAddressNumber > 0 and strAddressNumber <= 200 then
AvenueMagicNumber = 13
elseif strAddressNumber > 200 and strAddressNumber <= 400 then
AvenueMagicNumber = 16
elseif strAddressNumber > 400 and strAddressNumber <= 600 then
AvenueMagicNumber = 18
elseif strAddressNumber > 600 and strAddressNumber <= 774 then
AvenueMagicNumber = 20
elseif strAddressNumber > 775 and strAddressNumber <= 1286 then
AvenueMagicNumber = 18
bNeg = True
bSpecial = True
end if
Case "SIXTH AVENUE","AVENUE OF THE AMERICAS"
AvenueMagicNumber = 12
bNeg = True
Case "SEVENTH AVENUE","FASHION AVENUE"
AvenueMagicNumber = 12
Case "NINTH AVENUE"
AvenueMagicNumber = 13
Case "TENTH AVENUE"
AvenueMagicNumber = 14
Case "AMSTERDAM AVENUE","COLUMBUS AVENUE","WEST END AVENUE"
AvenueMagicNumber = 60
Case "BROADWAY"
AvenueMagicNumber = 30
bNeg = True
Case "LENOX AVENUE"
AvenueMagicNumber = 110
Case "LEXINGTON AVENUE"
AvenueMagicNumber = 22
Case "MADISON AVENUE"
AvenueMagicNumber = 26
Case "PARK AVENUE"
AvenueMagicNumber = 35
Case "RIVERSIDE DRIVE"
AvenueMagicNumber = 72
bSpecial = True
Case "CENTRAL PARK WEST"
AvenueMagicNumber = 60
bSpecial = True
Case Else
MakeError "The avenue you have entered is outside " & _
"the vicinity of Midtown Manhattan"
End Select
End Function
End Class