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 =====