VBScript: リテラル定数にまつわる調査
VBScript において、Const ステートメントで使用できるリテラル定数は以下のように分類される。
(1) 数値
1-1 Integer
・16ビットの符号付き整数 (-2^15 .. 2^15)
例:0, 32767, -32767, 01 (先頭の0は無視される), &O10 (8進数), &H7fff (16進数), &10 (8進数と同等)
※-32768, &H8000 はInteger型ではない。他の言語と異なるので注意。
1-2 Long
・32ビットの符号付き整数 [-2^31 .. -2^15], [2^15 .. 2^31)
例:-2147483647, –32768, 32768, 2147483647, &H7fffffff, &Hffffffff
※-2147483648 は Long型でない(Double型)が、&H80000000 は Long型である。奇妙な仕様。
1-2 Double
・小数点付きの数値表現
・科学表記 (表現可能は範囲の限界は 1e+308 程度?)
・Long の範囲を超えた整数
例:0., 3.14159265358979, 1e2, 1.2e-3, 2147483648, –2147483648
(2) 文字列
2-1 String
・文字列を "" で囲むと文字列定数となる
例:""(空の文字列), """" (1個のダブルクォーテーション), "Hello, World"
※VBScript によって定義されている定数を、Const に再利用することはできない。
vbCrLf (Windows の改行文字: キャリッジリターン+ラインフィード),
vbNullChar (1個のnull文字), vbNullString (長さが0の文字列、ただし""と比較しても一致しない) など
(3) 日付
3-1 Date
・フォーマットに従った日付表記を ## で囲むと日付・時刻を示す定数となる
例:#1-2#, #01-02#, #1/2#, #1 2#, #Jan-2#, #2-Jan#, "2,January" (現在の年、1月2日 0時0分0秒)
#1-2-3#, #2003-1-2#, #2-3-Jan#, #2003-2-Jan#, (2003年1月2日 0時0分0秒)
#4:5#, #04:05#, #4:5 AM# (1899年12月30日 4時5分0秒)
#4:5:6#, #04:05:06#, (1899年12月30日 4時5分6秒)
#1-2-3 4:5:6#, #4:5:6 1-2-3#, #2003-01-02 04:05:06# (2003年1月2日 4時5分6秒)
※日付表記において、「-」・「/」・「,」・連続したホワイトスペース文字(全角半角空白、タブ)は同じ意味となるようだ。
※日付フォーマットはOSのロケール設定に依存する
(4) 真偽値
4-1 Boolean
・True (=-1) または False(=0)
(5) Empty値、Null値
5-1 Empty
・Empty (未初期化値)
・Null (無効な値)
・検証用コード(CheckType.vbs)
If WScript.FullName <> WScript.Path & "\cscript.exe" Then Dim args, i, shell args = """" & WScript.ScriptFullName & """" For Each i In WScript.Arguments: args = args & " """ & i & """": Next Set shell = CreateObject("WScript.Shell") shell.Run WScript.Path & "\cscript.exe //NOLOGO " & args, 1, False WScript.Quit End If Check "0" Check "1" Check "0000000000000000001" Check "32767" ' 2^15-1 Check "32768" ' 2^15 Check "2147483647" ' 2^31-1 Check "2147483648" ' 2^31 Check "-0" Check "-1" Check "-32767" ' -(2^15-1) Check "-32768" ' -(2^15) Check "-2147483647" ' -(2^31-1) Check "-2147483648" ' -(2^31) Check "&O000000" ' 0 Check "&O00000000000" ' 0 Check "&O00000000001" ' 1 Check "&O77777" ' 2^15-1 Check "&O17777777777" ' 2^31-1 Check "&O177777" ' -1 Check "&O37777777777" ' -1 Check "&O100001" ' -(2^15-1) Check "&O100000" ' -(2^15) Check "&O20000000001" ' -(2^31-1) Check "&O20000000000" ' -(2^31) Check "&H0000" ' 0 Check "&H00000000" ' 0 Check "&H00000001" ' 1 Check "&H7fff" ' 2^15-1 Check "&H10000" ' 2^15 Check "&H7fffffff" ' 2^31-1 Check "&Hffff" ' -1 Check "&Hffffffff" ' -1 Check "&H8001" ' -(2^15-1) Check "&H8000" ' -(2^15) Check "&H80000001" ' -(2^31-1) Check "&H80000000" ' -(2^31) Check "0." Check "3.14159265358979" Check "1e2" Check "1.2e-3" Check """""" Check """""""""" Check """Hello, World""" Check "#1-2#" Check "#01-02#" Check "#1/2#" Check "#1 2#" Check "#Jan-2#" Check "#2-Jan#" Check "#1-2-3#" Check "#2003-1-2#" Check "#2-3-Jan#" Check "#2003-2-Jan#" Check "#4:5#" Check "#04:05#" Check "#4:5:6#" Check "#04:05:06#" Check "#1-2-3 4:5:6#" Check "#4:5:6 1-2-3#" Check "#2003-01-02 04:05:06#" Check "True" Check "False" Check "Empty" Check "Null" MsgBox "Click OK to exit." Function Check(ByVal description) WScript.StdOut.Write description & String(24 - Len(description), " ") Execute "WScript.Echo VarType(" & description & ") & "": "" & TypeName(" & description & ")" End Function
・出力結果
0 2: Integer 1 2: Integer 0000000000000000001 2: Integer 32767 2: Integer 32768 3: Long 2147483647 3: Long 2147483648 5: Double -0 2: Integer -1 2: Integer -32767 2: Integer -32768 3: Long -2147483647 3: Long -2147483648 5: Double &O000000 2: Integer &O00000000000 2: Integer &O00000000001 2: Integer &O77777 2: Integer &O17777777777 3: Long &O177777 2: Integer &O37777777777 2: Integer &O100001 2: Integer &O100000 3: Long &O20000000001 3: Long &O20000000000 3: Long &H0000 2: Integer &H00000000 2: Integer &H00000001 2: Integer &H7fff 2: Integer &H10000 3: Long &H7fffffff 3: Long &Hffff 2: Integer &Hffffffff 2: Integer &H8001 2: Integer &H8000 3: Long &H80000001 3: Long &H80000000 3: Long 0. 5: Double 3.14159265358979 5: Double 1e2 5: Double 1.2e-3 5: Double "" 8: String """" 8: String "Hello, World" 8: String #1-2# 7: Date #01-02# 7: Date #1/2# 7: Date #1 2# 7: Date #Jan-2# 7: Date #2-Jan# 7: Date #1-2-3# 7: Date #2003-1-2# 7: Date #2-3-Jan# 7: Date #2003-2-Jan# 7: Date #4:5# 7: Date #04:05# 7: Date #4:5:6# 7: Date #04:05:06# 7: Date #1-2-3 4:5:6# 7: Date #4:5:6 1-2-3# 7: Date #2003-01-02 04:05:06# 7: Date True 11: Boolean False 11: Boolean Empty 0: Empty Null 1: Null参考:
VarType 関数
http://msdn.microsoft.com/ja-jp/library/cc392346.aspx
0 件のコメント:
コメントを投稿