Récupère le type d’une variable dans VBScript

Comment puis-je obtenir le type d’une variable à l’aide de VBScript?

VarType est-il ce dont vous avez besoin?

Renvoie une valeur indiquant le sous-type d’une variable.

+--------------+-------+---------------------------------------------+ | Constant | Value | Description | +--------------+-------+---------------------------------------------+ | vbEmpty | 0 | Empty (uninitialized) | | vbNull | 1 | Null (no valid data) | | vbInteger | 2 | Integer | | vbLong | 3 | Long integer | | vbSingle | 4 | Single-precision floating-point number | | vbDouble | 5 | Double-precision floating-point number | | vbCurrency | 6 | Currency | | vbDate | 7 | Date | | vbSsortingng | 8 | Ssortingng | | vbObject | 9 | Automation object | | vbError | 10 | Error | | vbBoolean | 11 | Boolean | | vbVariant | 12 | Variant (used only with arrays of Variants) | | vbDataObject | 13 | A data-access object | | vbDecimal | 14 | Decimal Value | | vbByte | 17 | Byte | | vbLongLong | 20 | LongLong integer (64 bit) | | vbArray | 8192 | Array | +--------------+-------+---------------------------------------------+ 

La fonction VarType ne renvoie jamais la valeur pour Array par elle-même. Il est toujours ajouté à une autre valeur pour indiquer un tableau d’un type particulier. La valeur de Variant n’est renvoyée que lorsqu’elle a été ajoutée à la valeur de Array pour indiquer que l’argument de la fonction VarType est un tableau. Par exemple, la valeur renvoyée pour un tableau d’entiers est calculée comme suit: 2 + 8192 ou 8194. Si un object possède une propriété par défaut, VarType (object) renvoie le type de sa propriété par défaut.

Si vous souhaitez que le nom de type d’un object soit affecté à une variable avec Set , vous pouvez utiliser TypeName place.

 Class SomeClass '' empty class End Class Dim x Set x = New SomeClass WScript.Echo TypeName(x) '' displays "SomeClass" 

La réponse de Tmdean fonctionne également pour obtenir le Type Name (pas un nombre entier) de (presque) tous les autres types de variables (selon http://msdn.microsoft.com/en-us/library/ie/y58s1cs6%28v=vs .84% 29.aspx )

 dim i,s,a i = 1 s = "Hello world" a = split("Hello World"," ") WScript.Echo TypeName(i) 'Displays "Integer" WScript.Echo TypeName(s) 'Displays "Ssortingng" WScript.Echo TypeName(a) 'Displays "Variant()" 
 Dim a, b, c, d, e, f a = 10 b = "text" c = Split("John Doe,Jane Smith,Dick Tracy", ",") d = 1.2 e = Null f = True MsgBox "'a' is " & fVarType(a) & vbNewLine & _ "'b' is " & fVarType(b) & vbNewLine & _ "'c' is " & fVarType(c) & vbNewLine & _ "'d' is " & fVarType(d) & vbNewLine & _ "'e' is " & fVarType(e) & vbNewLine & _ "'f' is " & fVarType(f) & vbNewLine & _ "'g' is " & fVarType(c(0)) Function fVarType(x) Const ArrayCode = 8192 Dim y y = VarType(x) If y < ArrayCode Then fVarType = fGetType(VarType(x)) Else fVarType = "vbArray with " & fGetType(VarType(x)- ArrayCode) & " elements" End If End Function Function fGetType(vType) Select Case vType Case 0 fGetType = "vbEmpty" Case 1 fGetType = "vbNull" Case 2 fGetType = "vbInteger" Case 3 fGetType = "vbLong" Case 4 fGetType = "vbSingle" Case 5 fGetType = "vbDouble" Case 6 fGetType = "vbCurrency" Case 7 fGetType = "vbDate" Case 8 fGetType = "vbString" Case 9 fGetType = "vbObject" Case 10 fGetType = "vbError" Case 11 fGetType = "vbBoolean" Case 12 fGetType = "vbVariant" Case 13 fGetType = "vbDataObject" Case 14 fGetType = "vbDecimal" Case 17 fGetType = "vbByte" Case Else fGetType = "undetected" End Select End Function 

vartype est approprié …

 Dim x x=123 msgbox VarType(x) 
 Dim TypeDictionary Set TypeDictionary = CreateObject("Scripting.Dictionary") TypeDictionary.Add 0, "vbEmpty" TypeDictionary.Add 1, "vbNull" TypeDictionary.Add 2, "vbInteger" TypeDictionary.Add 3, "vbLong" TypeDictionary.Add 4, "vbSingle" TypeDictionary.Add 5, "vbDouble" TypeDictionary.Add 6, "vbCurrency" TypeDictionary.Add 7, "vbDate" TypeDictionary.Add 8, "vbSsortingng" TypeDictionary.Add 9, "vbObject" TypeDictionary.Add 10, "vbError" TypeDictionary.Add 11, "vbBoolean" TypeDictionary.Add 12, "vbVariant" TypeDictionary.Add 13, "vbDataObject" TypeDictionary.Add 17, "vbByte" Public Function GetType(argument) GetType = TypeDictionary.Item(VarType(argument)) End Function 

Cette version investit plus d’efforts dans la configuration du dictionnaire, mais recherche ensuite n’importe quel type dans une vérification (les doigts croisés) plutôt que de vérifier chaque type à chaque fois.

code JScript équivalent (hypothétique, puisque JScript a typeof, et manque de nombreux types de vb):

 var TypeDictionary = { 0: 'vbEmpty', 1: 'vbNull', 2: 'vbInteger', 3: 'vbLong', 4: 'vbSingle', 5: 'vbDouble', 6: 'vbCurrency', 7: 'vbDate', 8: 'vbSsortingng', 9: 'vbObject', 10: 'vbError', 11: 'vbBoolean', 12: 'vbVariant', 13: 'vbDataObject', 17: 'vbByte' }; var GetType = function() { return TypeDictionary[arguments[0]]; };