This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
vba:cast:cvalue [05.12.2014 14:16:54] yaslaw |
vba:cast:cvalue [19.10.2015 12:37:48] (current) yaslaw |
||
---|---|---|---|
Line 1: | Line 1: | ||
<const> | <const> | ||
- | version=1.0.0 | + | version=1.3.0 |
- | vdate=05.12.2014 | + | vdate=19.10.2015 |
fname=cast_cvalue.bas | fname=cast_cvalue.bas | ||
ns=%NAMESPACE% | ns=%NAMESPACE% | ||
Line 9: | Line 9: | ||
====== [VBA] cValue(), cV() ====== | ====== [VBA] cValue(), cV() ====== | ||
- | ==Version %%version%% - %%vdate%%== | + | //cValue versucht einen String in ein Nativetyp zu casten.// |
- | cValue versucht einen String in ein Nativetyp zu casten. Die Funktion wird zum Beispiel in [[vba:cast:cdict]] verwendet. | + | ==Version %%version%% - %%vdate%%== |
+ | Die Funktion wird zum Beispiel in [[vba:cast:cdict]] verwendet. | ||
{{%%fname%%|Download %%fname%% (V-%%version%%)}} | {{%%fname%%|Download %%fname%% (V-%%version%%)}} | ||
Line 111: | Line 112: | ||
**iFLags** ist ein String, der das Verhalten cV() steuert. Die Flags sind3 Buchstaben de kombiniert werden können. | **iFLags** ist ein String, der das Verhalten cV() steuert. Die Flags sind3 Buchstaben de kombiniert werden können. | ||
- | ***s** Der Text Null ohne Delemiter wird als Wert Null intepretiert | + | ***s** Der Text Null ohne Delemiter wird als Wert Null intepretiert |
- | ***e** Ein leerer String wird als Null intepretiert | + | ***e** Ein leerer String wird als Null intepretiert |
- | ***b** Boolean-Text wird als Boolean intepretiert | + | ***b** Boolean-Text wird als Boolean intepretiert |
- | ***d** Bei Delemited Strings den Delemiter entfernen. ' oder " gelten als Delemiter | + | ***d** Bei Delemited Strings den Delemiter entfernen. ' oder " gelten als Delemiter |
==== Beispiel ==== | ==== Beispiel ==== | ||
> Für die Ausgabe der Resultate verwendete ich die Funktion [[:vba:functions:print_r:]]. | > Für die Ausgabe der Resultate verwendete ich die Funktion [[:vba:functions:print_r:]]. | ||
Line 158: | Line 159: | ||
==== Nur Kurzversion cV ==== | ==== Nur Kurzversion cV ==== | ||
<code vb>'/** | <code vb>'/** | ||
- | ' * Dies ist die Minimalversion von cValue (V1.0.0): http://wiki.yaslaw.info/dokuwiki/doku.php/vba/cast/cvalue | + | ' * Dies ist die Minimalversion von cValue (V1.3.0): http://wiki.yaslaw.info/dokuwiki/doku.php/vba/cast/cvalue |
- | ' * Der 2te Paramtersteuert das Null-Verhalten('seb'): n: Der Text Null ohne Delemiter wird als Wert Null intepretiert, e: Ein leerer String wird als Null intepretiert, b: Boolean-Text wird als Boolean intepretiert | + | ' * @example myDict.Add(1, cV("True", "b")) |
+ | ' * @param Variant Wert der geparst wird | ||
+ | ' * @param String Flag ('nebd') | ||
+ | ' * n: Der Text Null ohne Delemiter wird als Wert Null intepretiert: "NULL" -> Null | ||
+ | ' * e: Ein leerer String wird als Null intepretiert, "" -> Null | ||
+ | ' * b: Boolean-Text wird als Boolean intepretiert "True" -> True (Boolean) | ||
+ | ' * d: Bei Delemited Strings den Delemiter nicht entfernen. ' oder " gelten als Delemiter: "'Hans'" -> Hans | ||
+ | ' * @return Variant | ||
' */ | ' */ | ||
Public Function cV(ByVal iValue As Variant, Optional ByVal iFlags As String) As Variant | Public Function cV(ByVal iValue As Variant, Optional ByVal iFlags As String) As Variant | ||
On Error Resume Next: If IsNull(iValue) Then cV = Null: Exit Function | On Error Resume Next: If IsNull(iValue) Then cV = Null: Exit Function | ||
- | Static rxDa As Object, rsDs As Object: Dim sm As Object, str As String, flg As String: str = CStr(iValue): flg = UCase(iFlags) | + | If Not VarType(iValue) = 8 Then cV = iValue: Exit Function |
+ | Static rxDa As Object, rxDs As Object: Dim sm As Object, str As String, flg As String: str = CStr(iValue): flg = UCase(iFlags) | ||
If UCase(str) = "NULL" And InStr(flg, "N") Then cV = Null: Exit Function | If UCase(str) = "NULL" And InStr(flg, "N") Then cV = Null: Exit Function | ||
If iValue = Empty And CBool(InStr(flg, "E")) Then cV = Null: Exit Function | If iValue = Empty And CBool(InStr(flg, "E")) Then cV = Null: Exit Function | ||
- | If IsDate(str) Then cV = CDate(str): Exit Function | ||
cV = CByte(str): If cV = str Then Exit Function | cV = CByte(str): If cV = str Then Exit Function | ||
cV = CInt(str): If cV = str Then Exit Function | cV = CInt(str): If cV = str Then Exit Function | ||
Line 172: | Line 180: | ||
cV = CDbl(str): If cV = str Then Exit Function | cV = CDbl(str): If cV = str Then Exit Function | ||
cV = CDec(str): If cV = str Then Exit Function | cV = CDec(str): If cV = str Then Exit Function | ||
- | Err.Clear: If InStr(flg, "B") Then cV = CBool(str): If Err.Number = 0 Then Exit Function | + | If IsDate(str) Then cV = CDate(str): Exit Function |
+ | Err.clear: If InStr(flg, "B") Then cV = CBool(str): If Err.Number = 0 Then Exit Function | ||
If rxDa Is Nothing Then Set rxDa = CreateObject("VBScript.RegExp"): rxDa.pattern = "^#(.*)#$" | If rxDa Is Nothing Then Set rxDa = CreateObject("VBScript.RegExp"): rxDa.pattern = "^#(.*)#$" | ||
- | If rxDa.Test(str) Then cV = CDate(rxDa.execute(str)(0).subMatches(0)): Exit Function | + | If rxDa.test(str) Then cV = CDate(rxDa.execute(str)(0).subMatches(0)): Exit Function |
- | If rsDs Is Nothing Then Set rsDs = CreateObject("VBScript.RegExp"): rsDs.pattern = "^([""'])(.*)\1$" | + | If InStr(flg, "D") > 0 Then cV = iValue: Exit Function |
- | If rsDs.Test(str) Then Set sm = rsDs.execute(str)(0).subMatches: cV = Replace(sm(1), "\" & sm(0), sm(0)): Exit Function | + | If rxDs Is Nothing Then Set rxDs = CreateObject("VBScript.RegExp"): rxDs.pattern = "^[#""'\[](.*)([""'#\]])$" |
+ | If rxDs.test(str) Then Set sm = rxDs.execute(str)(0).subMatches: cV = Replace(sm(0), "\" & sm(1), sm(1)): Exit Function | ||
cV = iValue | cV = iValue | ||
End Function</code> | End Function</code> |