Сентябрь 2005


Об Oracle легко и доступно


Пол Вебстер

Использование Oracle-функция "INITCAP"
(Using Oracle's "INITCAP", by Paul Webster)

Источник: сайт searchDatabase.com, раздел "Database Tips", http://searchoracle.techtarget.com/tip/1,289483,sid41_gci910437,00.html,

22 октября 2001, рейтинг 5.00 (из 5)

Я всегда считал очень полезным применение Oracle-функции "INITCAP" при построении имен и адресов в SQL-отчетах, когда процессор данных использует все символы как верхнего (upper), так и нижнего (lowercase) регистров. Применение этой функции делает отчет более удобочитаемым, так как она выделяет (initialising) первый символ каждого слова. Однако, эта функция отсутствует в базовом Access. Ниже приводится процедура, которая реализует подобную функциональность. Она разработана как модуль и может быть вызвана из запроса, использовавщего InitCap ([fieldname]).

Любое слово, заключенное в круглые скобки или кавычки, остается неизменным. Все остальные слова преобразуются так, что Первый символ пишется на верхнем регистре, а остальные - на нижнем.


Function InitCap(StrString As Variant) As String
' Разработчик: Paul Webster
' Аналог Oracle-функции INITCAP
' Неалфавитные символы остаются неизменными
' Все, заключеное в двойные или одинарные кавычки, остается неизменным
' Все внутри круглых, фигурных и квадратных скобок({[]}),остается неизменным

Dim StrNew, StrCurrent, StrPrevious As String 
Dim x As Integer 
x = 1 
' If the input string is empty, do now.
If IsNull(StrString) Then

    StrNew = " " 
Else 
' Prime previous character string
    StrPrevious = Left$(StrString, 1)
' Clear out new string 
    StrNew = ""
' Begin loop 
    Do While x < Len(StrString) + 1
' Load current character
        StrCurrent = Mid$(StrString, x, 1)
' Are we at the start of the string?
        If x = 1 And StrCurrent <> " " Then
' If no leading spaces then make uppercase
            StrNew = StrNew + UCase$(StrCurrent)

        Else 
' Test previous character 
            Select Case StrPrevious
' Is is a space? 
                Case Is = " "
' Yes! Is the current character also a space?
                    If StrCurrent <> " " Then
' No then must be a first character
                        StrNew = StrNew + UCase$(StrCurrent)

                    End If 
' Is is parenthesis or quotes?
                Case Is = Chr$(34), Chr$(39), Chr$(40), Chr$(91), Chr$(123)
' Yes so output as is 
                    StrNew = StrNew + StrCurrent
' Bump up counter 
                    x = x + 1
' Get next character 
                    StrCurrent = Mid$(StrString, x, 1)
' Now loop until closing parenthesis is found
                    Do While InStr(Chr$(34) + Chr$(39) + ")]}", StrCurrent) = 0
' Outputting as is 
                        StrNew = StrNew + StrCurrent
' Bump up counter 
                        x = x + 1
' Get next character 
                        StrCurrent = Mid$(StrString, x, 1)
' Until final parenthesis 
                    Loop
' Which we output as is 
                    StrNew = StrNew + StrCurrent
                Case Else 
' OK so make it lowercase 
                    StrNew = StrNew + LCase$(StrCurrent)
            End Select 
        End If
' Set previous character and 
        StrPrevious = StrCurrent
' Bump up counter 
        x = x + 1
' Start again 
    Loop
End If 
' Return modified string
InitCap = StrNew

End Function
E-mail this page