This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
vba:cast:techname [28.05.2014 16:26:44] yaslaw [[VBA] techName()] |
vba:cast:techname [03.01.2017 16:04:50] (current) yaslaw |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | <const> | ||
+ | version=2.1.0 | ||
+ | vdate=03.01.2017 | ||
+ | fname=cast_techname.bas | ||
+ | ns=%NAMESPACE% | ||
+ | fpath=/vba/cast | ||
+ | </const> | ||
====== [VBA] techName() ====== | ====== [VBA] techName() ====== | ||
- | Erstellt aus einem String ein Technischer Name. Ersetzt Leer- und Sonderzeichen durch _, kürzt aus vorgegebene Länge, übersetzt Umlaute etc. | + | //Erstellt aus einem String ein Technischer Name. Ersetzt Leer- und Sonderzeichen durch _, kürzt aus vorgegebene Länge, übersetzt Umlaute etc.// |
- | {{:vba:functions:udf_techname.bas|Download udf_techname.bas}} | + | ==Version %%version%% - %%vdate%%== |
+ | {{%%fname%%|Download %%fname%% (V-%%version%%)}} | ||
+ | |||
+ | >Siehe auch [[vba:cast:readablename]] | ||
===== Definition ===== | ===== Definition ===== | ||
- | <code>techName(iName[, iMaxLen][, iStrConv][, iClearCache])</code> | + | <code>techName(iName[, iMaxLen[, iStrConv[, iDelemiter]]])</code> |
<code vb>Public Function techName( _ | <code vb>Public Function techName( _ | ||
ByVal iName As String, _ | ByVal iName As String, _ | ||
Optional ByVal iMaxLen As Integer = 255, _ | Optional ByVal iMaxLen As Integer = 255, _ | ||
- | Optional ByVal As tnStrConv = vbUpperCase, _ | + | Optional ByVal iStrConv As tnStrConv = vbUpperCase, _ |
- | Optional ByVal iClearCache As Boolean = False _ | + | Optional ByVal iDelemiter As Variant = Null _ |
) As String</code> | ) As String</code> | ||
***iName ** Name der gewandelt werden soll | ***iName ** Name der gewandelt werden soll | ||
***iMaxLen ** Maximale Länge | ***iMaxLen ** Maximale Länge | ||
***iStrConv ** Art der Konvertierung. Lower/Uper/Proper-Case | ***iStrConv ** Art der Konvertierung. Lower/Uper/Proper-Case | ||
- | ***iClearCache ** Flag, ob der ObjectCache geleert werden soll. Wird nur zum testen der Funktion gebraucht | + | ***iDelemiter ** Deleimter. Default: Bei Proper Case "" ansonsten "_" gebraucht |
+ | |||
+ | === Enum tnStrConv === | ||
+ | Der Enum ist eigentlich nur eine Auswahl aus vbStrConv | ||
+ | <code vb>Public Enum tnStrConv | ||
+ | vbUpperCase = VbStrConv.vbUpperCase 'Alles in Grossbuchstaben -> Standarddelimiter: "_" | ||
+ | vbLowerCase = VbStrConv.vbLowerCase 'Alles in Kleinbuchstaben -> Standarddelimiter: "_" | ||
+ | vbProperCase = VbStrConv.vbProperCase 'Immer erster Buchstabe klein -> Standarddelimiter: "" | ||
+ | End Enum</code> | ||
===== Beispiele ===== | ===== Beispiele ===== | ||
+ | > Für die Beispiele verwende ich [[vba:functions:print_r:index]] | ||
+ | |||
In dem Beispiel mache ich aus dem folgenden Text einen technischen Namen | In dem Beispiel mache ich aus dem folgenden Text einen technischen Namen | ||
<code>Bücherpreis [CHF] | <code>Bücherpreis [CHF] | ||
bei Sofortkauf!!!</code> | bei Sofortkauf!!!</code> | ||
- | <code vb>'Standart | + | <code vb>'Standard. Mit UpperCase und _ als Delemiter |
- | print_r techName("Bücherpreis [CHF]" & vbcrlf & "bei Sofortkauf!!!") | + | d techName("Bücherpreis [CHF]" & vbcrlf & "bei Sofortkauf!!!") |
<String> 'BUECHERPREIS_CHF_BEI_SOFORTKAUF' | <String> 'BUECHERPREIS_CHF_BEI_SOFORTKAUF' | ||
- | 'auf 16 Zeichen begrenzt | + | 'Auf 15 Zeichen abgeschnitten |
- | print_r techName("Bücherpreis [CHF]" & vbcrlf & "bei Sofortkauf!!!",16) | + | d techName("Bücherpreis [CHF]" & vbcrlf & "bei Sofortkauf!!!", 15) |
- | <String> 'BUECHERPREIS_CHF' | + | <String> 'BUECHERPREIS_CH' |
- | 'und Kleinbuchstaben | + | 'Lowercase und als Trennzeichen ein - |
- | print_r techName("Bücherpreis [CHF]" & vbcrlf & "bei Sofortkauf!!!",16, vbLowerCase) | + | d techName("Bücherpreis [CHF]" & vbcrlf & "bei Sofortkauf!!!",,vbLowerCase, "-") |
- | <String> 'buecherpreis_chf'</code> | + | <String> 'buecherpreis-chf-bei-sofortkauf' |
- | + | ||
- | ====== Code ====== | + | |
- | <code vb udf_techName.bas>Attribute VB_Name = "udf_techName" | + | |
- | '------------------------------------------------------------------------------- | + | |
- | 'File : udf_techName.bas | + | |
- | ' Copyright mpl by ERB software | + | |
- | ' All rights reserved | + | |
- | ' http://wiki.yaslaw.info/dokuwiki/doku.php/vba/cast/strtodate | + | |
- | 'Environment : VBA 2007 + | + | |
- | 'Version : 1.1 | + | |
- | 'Name : techName | + | |
- | 'Author : Stefan Erb (ERS) | + | |
- | 'History : 05.05.2014 - ERS - Creation | + | |
- | ' 28.05.2014 - ERS - tnStrConv hinzugefügt um die unnützen Einträge aus VbStrConv rauszufiltern | + | |
- | '------------------------------------------------------------------------------- | + | |
- | Option Explicit | + | |
- | + | ||
- | Private cacheDictUmlaute As Object | + | |
- | Private cacheRxNonWords As Object | + | |
- | Private cacheRxTrim As Object | + | |
- | + | ||
- | Public Enum tnStrConv | + | |
- | vbUpperCase = VbStrConv.vbUpperCase | + | |
- | vbLowerCase = VbStrConv.vbLowerCase | + | |
- | End Enum | + | |
- | + | ||
- | '/** | + | |
- | ' * Erstellt aus einem String einen technischen Namen | + | |
- | ' * @param String Name der gewandelt werden soll | + | |
- | ' * @param Integer Maximale Länge | + | |
- | ' * @param VbStrConv Art der Konvertierung. Lower/Uper/Proper-Case | + | |
- | ' * @param Boolean Floag, ob der ObjectCache geleert werden soll. Wird nur zum testen der Funktion gebraucht | + | |
- | ' * @return String | + | |
- | ' */ | + | |
- | Public Function techName( _ | + | |
- | ByVal iName As String, _ | + | |
- | Optional ByVal iMaxLen As Integer = 255, _ | + | |
- | Optional ByVal iStrConv As tnStrConv = vbUpperCase, _ | + | |
- | Optional ByVal iClearCache As Boolean = False _ | + | |
- | ) As String | + | |
- | 'Cache der Übersetzungen initialisieren | + | |
- | If cacheDictUmlaute Is Nothing Or iClearCache Then | + | |
- | Set cacheDictUmlaute = CreateObject("scripting.Dictionary") | + | |
- | With cacheDictUmlaute | + | |
- | 'Hier weitere Umsetzungen programmieren. Alle in LowerCase | + | |
- | .add "ä", "ae": .add "ö", "oe": .add "ü", "ue": .add "ß", "ss": .add "é", "e": .add "è", "e" | + | |
- | End With | + | |
- | End If | + | |
- | 'Chache des Patterns initializieren | + | |
- | If cacheRxNonWords Is Nothing Or iClearCache Then | + | |
- | Set cacheRxNonWords = CreateObject("VBScript.RegExp") | + | |
- | cacheRxNonWords.pattern = "([\W_]+)" | + | |
- | cacheRxNonWords.Global = True | + | |
- | End If | + | |
- | + | ||
- | If cacheRxTrim Is Nothing Or iClearCache Then | + | |
- | Set cacheRxTrim = CreateObject("VBScript.RegExp") | + | |
- | cacheRxTrim.pattern = "^_*((?:[A-Z]|_(?!$))*)_*$" | + | |
- | End If | + | |
- | + | ||
- | techName = LCase(iName) | + | |
- | + | ||
- | 'Umlaute entfernen | + | |
- | Dim k As Variant: For Each k In cacheDictUmlaute.keys | + | |
- | techName = Replace(techName, k, cacheDictUmlaute.item(k)) | + | |
- | Next k | + | |
- | 'String Convertierung | + | 'ProperCase. Standarddelmiter ist den dem Fall "". Ergibt also ein CamelCase |
- | techName = StrConv(techName, iStrConv) | + | d techName("Bücherpreis [CHF]" & vbcrlf & "bei Sofortkauf!!!",,vbProperCase) |
- | 'Alle Nicht-Buchstaben durch _ ersezuen | + | <String> 'BuecherpreischfBeiSofortkauf' |
- | techName = cacheRxNonWords.Replace(techName, "_") | + | </code> |
- | 'Führende und folgende _ entfernen | + | |
- | techName = cacheRxTrim.Replace(techName, "$1") | + | |
- | 'ggf Länge reduzieren | + | |
- | techName = Left(techName, iMaxLen) | + | |
- | End Function</code> | + | ===== Code ===== |
+ | <source '%%fpath%%/%%fname%%' vb> |