John Topley's Knowledgebase
Correctly Capitalise Names
Friday, 30 May 2003
This Visual Basic code will correctly capitalise most English names and handles some common exception cases. For example, mcdonald becomes McDonald and d'arcy becomes D'Arcy.
Download 0004.txt
Private Function Capitalise(ByVal vStrText As String) As String
Dim intPos As Integer
Dim strCapitalised As String
strCapitalised = vStrText
' Check for a passed null or empty string.
If (IsNull(strCapitalised)) Or (LenB(strCapitalised) = 0) Then
strCapitalised = vbNullString
' A valid string was passed.
Else
' Simple case e.g. Smith.
strCapitalised = UCase$(Left$(strCapitalised, 1)) & LCase$(Right$(strCapitalised, Len(strCapitalised) - 1))
' Apostrophe case e.g. D'Arc.
intPos = InStr(1, strCapitalised, "'")
If intPos > 0 Then
strCapitalised = UCase$(Left$(strCapitalised, 1)) & LCase$(Mid$(strCapitalised, 2, (intPos - 2))) & "" & UCase$(Mid$(strCapitalised, intPos + 1, 1)) & LCase$(Right$(strCapitalised, Len(strCapitalised) - (intPos + 1)))
End If
' McDonald case.
intPos = InStr(1, LCase$(strCapitalised), "mc")
If intPos > 0 Then
strCapitalised = UCase$(Left$(strCapitalised, 1)) & LCase$(Mid$(strCapitalised, 2, 1)) & UCase$(Mid$(strCapitalised, 3, 1)) & LCase$(Right$(strCapitalised, Len(strCapitalised) - 3))
End If
' MacDonald case.
intPos = InStr(1, LCase$(strCapitalised), "mac")
If intPos > 0 Then
strCapitalised = UCase$(Left$(strCapitalised, 1)) & LCase$(Mid$(strCapitalised, 2, 2)) & UCase$(Mid$(strCapitalised, 4, 1)) & LCase$(Right$(strCapitalised, Len(strCapitalised) - 4))
End If
' Space case e.g. John Smith.
intPos = InStr(1, strCapitalised, " ")
If intPos > 0 Then
strCapitalised = SplitText(strCapitalised, " ")
End If
' Hyphen case e.g. John Double-Barrelled.
intPos = InStr(1, strCapitalised, "-")
If intPos > 0 Then
strCapitalised = SplitText(strCapitalised, "-")
End If
End If
' Assign the function result.
Capitalise = strCapitalised
End Function
Private Function SplitText(ByVal vStrText As String, ByVal vStrDelimiter As String) As String
Dim intIndex As Integer
Dim intLowerBound As Integer
Dim intUpperBound As Integer
Dim strTextArray() As String
SplitText = vbNullString
' Split the passed text into an array,
' delimited by the passed delimiter.
strTextArray = Split(vStrText, vStrDelimiter)
If Not IsEmpty(strTextArray) Then
intLowerBound = LBound(strTextArray)
intUpperBound = UBound(strTextArray)
' Iterate through the array, capitalising
' the substrings in each element.
For intIndex = intLowerBound To intUpperBound
strTextArray(intIndex) = Capitalise(strTextArray(intIndex))
Next
' Join the substrings together again,
' delimit using the passed delimiter
' and assign to the function result.
SplitText = Join(strTextArray, vStrDelimiter)
End If
End Function
top | index | previous | no next | comments ()
|