VBScript: 多バイト文字列の長さの取得
VBScript には、文字列の長さを調べる関数として「Len」「LenB」が用意されている。
しかし、「LenB」を行うと文字列はUnicodeとして扱われるため、半角文字も全角文字も2バイトとしてカウントされてしまう。
従ってそれらが混在している場合は正しい長さ(≒SJISのバイト数)を得ることはできない。
半角文字を1バイト、全角文字を2バイトとしてカウントするためには、このような関数を自前で用意する必要がある。
・Function LenMB()
1 2 3 4 5 6 7 8 | 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 |
・テストコード
1 2 3 4 5 6 7 8 9 10 11 | 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 |
・出力結果
1 2 3 4 5 6 7 8 9 | 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 件のコメント:
コメントを投稿