version=1.0.0 vdate=21.06.2016 fname=cast_cstrf.bas ns=%NAMESPACE% fpath=/vba/cast ====== [VBA] cStrF ====== //Erweiterter CStr()// ==Version %%version%% %%vdate%%== {{%%fname%%|Download %%fname%% (V-%%version%%)}} Inteligentere Umsetzung des VBA-Befehls CStr. Die Funktion erkennt auch Objekte mit dem Interface IFormattable. Zudem sind diverse weitere Objekte/Typen abgedeckt. ===== Einstellungen ===== Im Code gibt es 2 Einstellungen, die die Möglchkeiten steuern. Da ich diese Funktion für mich geschrieben habe, habe ich auch einige Methoden und Objekte, die sin in meiner Library befinden zur Verfügung. Diese sind aber nicht zwingend. Mit den folgenden Einstellungen kann angegeben werden, ob die Module verfügbar sind. Angabe, ob das Modul [[vba:cast:json|lib_json]] in diesem Projekt vorhanden ist oder nicht \\ ''#Const lib_json_exists = True'' Das Interface [[vba:classes:iformattable|IFormattable]] ist in diesem Projekt vorhanden \\ ''#Const IFormattable_exists = True'' ===== Definition ===== Public Function cStrF( _ ByRef iValue As Variant, _ Optional ByVal iparams As csfParams = csfListAsJson + csfNullAsEmpty, _ Optional ByVal iDelemiter As String = ", " _ ) As String ==== Paramterliste ==== * **iValue** Item das zu einem String geparst werden soll * **iparams** Paramter um das Verhalten von CStrF zu steuern * **iDelemiter** String ==== Enumerators ==== csfParams Public Enum csfParams csfNon = 0 'Kein Parameter aktiv csfListAsJson = 2 ^ 0 'Falls die Library lib_json die Listen (Array, Dictionary etc) als Json-String zurückgeben. Ansonsten als Werteliste mit Komma getrennt csfRegExpOnlyPattern = 2 ^ 1 'Bei einem Regexp nur den Pattern zurückgeben csfNullAsEmpty = 2 ^ 2 'Null und Nothing als Empty zurückgeben csfIsSubItem = 2 ^ 9 'Wird nur Intern benutzt End Enum ===== Beispiele ===== Hier einige Anwendungsbeispiele > Für die Ausgabe der Resultate verwendete ich die Funktion [[vba:functions:print_r:]]. ==== Listen ==== Dictionaries sind im Beispieldirekt mit [[vba:cast:cdict]] erstellt. ? cStrF(array(1,2,3)) [1,2,3] ? cStrF(array(1,2,3), csfNon, "#") 1#2#3 ? cStrF(array(1,2,array(1,22,33))) [1,2,[1,22,33]] 'Verschachtelter Array ? cStrF(array(1,2,array(1,22,33)), csfNon) 1, 2, (1, 22, 33) 'Dictionary anzeigen print_r cDict("a", 12, "b", array(22, 33)) ( [a] => 12 [b] => ( [0] => 22 [1] => 33 ) ) 'und mittels cStrF ausgeben. 'Ist lib_json vorhanden, wird der Dictionary als json-String ausgegeben ? cstrf(cDict("a", 12, "b", array(22,33))) {"a":12,"b":[22,33]} 'Ansnsten gehen die Keys verloren ? cstrf(cDict("a", 12, "b", array(22,33)), csfNon) 12, (22, 33) ==== Null und Nothing ==== print_r cStrF(Null) '' print_r cStrF(Nothing) '' ==== Mit Klassen die ein toString haben oder das Interface IFormattable besitzen ==== Solche Klassen können dierkt geparst werden. Die folgenden Klassen kommen in den Beispielen vor: [[vba:classes:date:index]], [[vba:classes:iterator:index]] 'DateTime ? cStrF(DateTime().add("P3D")) #2016-06-26 12:00:51# 'DateInterval ? cStrF(DateTime(#12/31/2015#).diff(date())) P5M23D ? cStrF(DateInterval.instancePart("M", 3)) P3M 'Iterator 'Wenn der Cursor nocht nicht positioniert ist, wird der Erste Wert ausgegeben ?cStrF(Iterator(array(1,2,3))) 1 'Ansonsten der aktuelle ?cStrF(Iterator(array(1,2,3)).toPosition1(2)) 3 ==== Objekte die nicht geparst werden können ==== tbd ===== Code =====