- ベストアンサー
VB.NET LeftBの代用
こんにちわ。 文字列を、バイト数でカットしたいのですが、方法がわかりません。 例えば、 "1あ2い3う4え5お"という文字列があるとすると この文字列の4バイト分の"1あ2"を取り出したい と言ったケースです。 ヘルプを調べたら、 LeftB,MidB,RightBの関数は、VB.NETから、 文字列が、Unicodeの2バイト扱いになるので、 サポートされていないと記述されていました。 LeftB関数と同じような事を、VB.NETでも行いたいです。 どなたか、アドバイスお願致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>文字列が、Unicodeの2バイト扱いになるので、 >サポートされていないと記述されていました。 無かったら、作るしかないですね。 私も最初、はまりました。 Public Shared Function MidB(ByVal value As String, ByVal start As Integer, ByVal length As Integer) As String 'バイト数に応じた部分文字列を取得する Dim encod As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS") Dim bytes As Byte() = encod.GetBytes(value.PadRight(start + length)) Return encod.GetString(bytes, start - 1, length) End Function Public Shared Function LeftB(ByVal value As String, ByVal length As Integer) As String 'バイト数に応じた部分文字列を取得する Dim encod As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS") Dim bytes As Byte() = encod.GetBytes(value.PadRight(length)) Const start As Integer = 0 Return encod.GetString(bytes, start, length) End Function Public Shared Function RightB(ByVal value As String, ByVal length As Integer) As String 'バイト数に応じた部分文字列を取得する Dim encod As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS") Dim bytes As Byte() = encod.GetBytes(value.PadLeft(length)) Dim start As Integer start = UBound(bytes) + 1 - length 'バイト数 Return encod.GetString(bytes, start, length) End Function Public Shared Function LenB(ByVal vstr As String) As Integer If vstr = "" Then Return 0 Else Return System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(vstr) End If End Function
その他の回答 (1)
- popesyu
- ベストアンサー率36% (1782/4883)
System.Text.Encoding.Unicode.GetByteCount("123あ") System.Text.Encoding.Default.GetByteCount("123あ") この二つで違いが分かるので後は適当に工夫してください。
お礼
アドバイス有難うございました!
お礼
ご回答有難うございます。 コードまで有難うございます。 参考にさせていただきます。 有難うございました。