VBScript: 多バイト文字列の長さの取得
VBScript には、文字列の長さを調べる関数として「Len」「LenB」が用意されている。
しかし、「LenB」を行うと文字列はUnicodeとして扱われるため、半角文字も全角文字も2バイトとしてカウントされてしまう。
従ってそれらが混在している場合は正しい長さ(≒SJISのバイト数)を得ることはできない。
半角文字を1バイト、全角文字を2バイトとしてカウントするためには、このような関数を自前で用意する必要がある。
・Function LenMB()
Function LenMB(ByVal expression) If IsNull(expression) Then LenMB = Null: Exit Function Dim i, c: c = 0 For i = 1 To Len(expression) If Asc(Mid(expression, i, 1)) And &Hff00 Then c = c + 1 Next LenMB = i + c - 1 End Function
・テストコード
Function Check(s): WScript.Echo Len(s), LenB(s), LenMB(s): End Function Check "" ' 0 Check "abcde" ' 5 Check "あいうえお" ' 10 (=2*5) Check "abcえお" ' 7 (=3+2*2) Check " " ' 1: 半角スペース Check " " ' 2: 全角スペース Check String(1000000, vbTab) ' 1000000 Check String(1000000, "あ") ' 2000000 Check Null ' null
・出力結果
0 0 0 5 10 5 5 10 10 5 10 7 1 2 1 1 2 2 1000000 2000000 1000000 1000000 2000000 2000000 null null null
2012/04/04 追記
Windows XP / Windows Server 2003 であれば、同様の処理は Microsoft.CmdLib オブジェクトを利用することで
より簡単に実現することができる。(ただし Null の扱いは少し変わる)
具体的には、CreateObject(“Microsoft.CmdLib”).LengthinBytes() を行なえばよい。
詳細はファイルの実体 %SystemRoot%\system32\cmdlib.wsc を参照。
0 件のコメント:
コメントを投稿