User Tools

Site Tools


vba:cast:readablename

[VBA] readableName()

Diese Funktion erstellt aus einem technischen Namen ein halbwegs lesbarer Namen.

Version 1.1.0 - 28.01.2015

Definition

name = readableName(technischer Name [, Type des technischen Namens])
Public Function readableName( _
        ByVal iTechName As String, _
        Optional ByVal iType As rnTechNameType = rnAutomaitc _
) As String
  • iTechName Der Technische Name
  • rnTechNameType Art der Worttrennung

Beispiele

Die Beispiele wurden im Direktfenster erstellt

?readableName("ITEM_NAME")
Item Name
 
?readableName("ItemName1")
Item Name 1
 
?readableName("Ort", rnUnderline)
Ort

Code

cast_readablename.bas
Attribute VB_Name = "cast_readableName"
'-------------------------------------------------------------------------------
'File         : cast_readableName.bas
'               Copyright mpl by ERB software
'               All rights reserved
'               http://wiki.yaslaw.info/dokuwiki/doku.php/vba/cast/readableName
'Environment  : VBA 2007 +
'Version      : 1.1.0
'Name         : readableName
'Author       : Stefan Erb (ERS)
'History      : 17.06.2014 - ERS - Creation
'               08.07.2014 - ERS - kleinere Korrekturen
'               31.10.2014 - ERS - Cache auf Static umgestellt
'               28.01.2015 - ERS - rnSpace hinzugefügt
'-------------------------------------------------------------------------------
Option Explicit
 
Public Enum rnTechNameType
    rnUnderline     'Die Wörter sind beim technischen Namen mit Unterstriche getrennt. FOO_BAR -> Foo Bar
    rnSpace         'Die Wörter sind mit Leerzeicen getrennt. FOO BAR -> Foo Bar
    rnCamelCase     'Die Wörter sind mit CamelCase getrennt. FooBar -> Foo Bar
    rnAutomaitc     'Die Funktion findet selber heraus, welcher Type es ist. Kommt ein _ im Text for, ist es rnUnderline, ansonsten rnCamelCase
End Enum
 
 
'/**
' * Entspricht dem Gegenteil von techName. macht aus Technischen Namen lesbare Namen
' *
' *     name = readableName(technischer Name [, Type des technischen Namens])
' *
' * @param  String          Der Technische Name
' * @param  rnTechNameType  Art der Worttrennung
' * @return String
' */
Public Function readableName( _
        ByVal iTechName As String, _
        Optional ByVal iType As rnTechNameType = rnAutomaitc _
) As String
    Dim words() As String
    Dim idx As Integer
 
parse:
    Select Case iType
        Case rnAutomaitc
            iType = Switch( _
                InStr(iTechName, "_") > 0, rnUnderline, _
                InStr(iTechName, " ") > 0, rnSpace, _
                True, rnCamelCase _
            )
            GoTo parse  'Try with the neu type
 
        Case rnUnderline
            words = Split(iTechName, "_")
        Case rnSpace
            ReDim words(0): words(0) = iTechName
        Case rnCamelCase, rnSpace
            If Not rxCamelCase.test(iTechName) Then
                ReDim words(0): words(0) = iTechName
            Else
                Dim mc As Object: Set mc = rxCamelCase.execute(iTechName)
                ReDim words(mc.count - 1): For idx = 0 To mc.count() - 1
                    words(idx) = mc(idx)
                Next idx
            End If
    End Select
 
    readableName = strConv(Join(words, " "), vbProperCase)
End Function
 
Private Property Get rxCamelCase() As Object
    Static pRxCamelCase As Object
    If pRxCamelCase Is Nothing Then
        Set pRxCamelCase = CreateObject("VBScript.RegExp")
        pRxCamelCase.Global = True
        pRxCamelCase.pattern = "/(?!\s_)(?:[A-Z]?[^A-Z\s_]+)/g"
    End If
    Set rxCamelCase = pRxCamelCase
End Property
 
vba/cast/readablename.txt · Last modified: 31.08.2015 11:27:41 by yaslaw