【VB.NET】VB6のLenBをVB.NETでも使いたい!

f:id:Cat_Of_STELLA:20170803215213j:plain

VB6で頻繁に使われてたLenB関数は、VB.NETで使えなくなりました。Len関数はあるんですけどね。マイグレーションやシステムリプレースの時にVB6のソースコード上で頻繁に見られたLenB関数ですが、そもそもLenB関数とは何かも知らなくて苦戦している人も多いはずです。今回はLenB関数と、VB.NETでLenB関数の再現について紹介します。

LenB関数について

その前にLen関数

MSDNにLenB関数と似たようなLen関数について解説があります。

Len 関数 (Visual Basic)

詳細はそこを見て頑張って下さいね!と言いたいところですが、LenB関数について調べてる人が多いと思うので、まずはLen関数の解説から、そしてLenB関数の解説と進めます。Len関数について、MSDNには以下の様に説明があります。

指定された文字列の文字数、または変数の格納に必要な名目上のバイト数を含む整数型の値を返します。

「 なるほど、わからん。」と言う声が聞こえそうですね。MSDNはアメリカンな感じで書かれているので、意味を理解するには少しだけ時間がかかります。私も最初はそんな感じでした。

このLen関数というのは文字列の長さを返してくれます。VB.NETのString.Lengthプロパティと一緒です。試しに下記のコードを実行してみて下さい。Len関数はVB.NETでも使えるので、何でも良いのでプロジェクトを作成して実行してみましょう。

Dim strMsg As String = "おはようございます。"
Dim resultLen As Integer = Len(strMsg)
MessageBox.Show(resultLen.ToString,"Len関数の結果")

実行すると、文字列の長さがメッセージボックスに表示されます。まずは、このLen関数を覚えて下さい。

LenB関数

お待たせしました。LenB関数の出番です。LenB関数は文字列のバイト数を返してくれます。Len関数は文字列の長さですが、LenB関数はバイト数です。文字列の長さとバイト数が分からないと言う人は頑張って調べて頂きたいところですが、簡単に以下の違いです。

「おはようございます。」という文字列の長さとバイト数

  • 文字列の長さ:10
  • バイト数:20

たったこれだけです。LenはLengthの略長さと言う意味、B」付いているのでバイトと覚えれば楽勝です。がなので、「おはようございます。」をLen関数の引数に渡すと整数値10が、LenB関数の引数に渡すと整数値20が戻って来ます。

VB.NETでLenBを再現

いよいよ、VB.NETでLenBを再現します。結論から提示すると以下の様に書きます。

System.Text.Encoding.GetEncoding(932).GetByteCount(文字列)

これでバイト数を取得することが出来ます。なので、マイグレーションとかシステムリプレースでLenB関数を維持したい場合は、LenBという名称のメソッドを作成してあげましょう。

Private Function LenB(ByVal strText As String) As Integer
    Return System.Text.Encoding.GetEncoding(932).GetByteCount(strText)
End Function

Encoding.GetEncodingメソッドで指定したエンコーディングのEncodingオブジェクトを取得することができるので、GetEncodingメソッドの引数にshift-jisに相当する932を渡します。そしてGetByteCountの引数にバイト数を調べたいString型の変数を渡せば、指定文字列のバイト数を取得することが出来ます。なので、広域の共通メソッドにLenBという独自のメソッドを作り、メソッドの中身はバイト数を返すように書けばVB6時代のLenB関数が完成ということになります。

まとめ

Len関数とLenB関数の違いは、Len関数が文字列の長さ、LenB関数が文字列のバイト数を取得できるという事です。また、LenB関数をVB.NETで再現する場合は、LenBメソッド作って中身を「System.Text.Encoding.GetEncoding(932).GetByteCount(文字列)」でOKです。あと、Len関数使うならLengthプロパティ使ってください!