Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
文字列をバイト単位で位置指定して切り抜く
以下の関数MidBを使うと、位置をバイト単位で指定して文字列を切り抜くことができる。この関数はMid関数と同じ使い方ができる。具体的な用法は使用例を参照。
'■MidB ''' <summary>Mid関数のバイト版。文字数と位置をバイト数で指定して文字列を切り抜く。</summary> ''' <param name="str">対象の文字列</param> ''' <param name="Start">切り抜き開始位置。全角文字を分割するよう位置が指定された場合、戻り値の文字列の先頭は意味不明の半角文字となる。</param> ''' <param name="Length">切り抜く文字列のバイト数</param> ''' <returns>切り抜かれた文字列</returns> ''' <remarks>最後の1バイトが全角文字の半分になる場合、その1バイトは無視される。</remarks> Public Function MidB(ByVal str As String, ByVal Start As Integer, Optional ByVal Length As Integer = 0) As String '▼空文字に対しては常に空文字を返す If
str = ""
Then '▼Lengthのチェック 'Lengthが0か、Start以降のバイト数をオーバーする場合はStart以降の全バイトが指定されたものとみなす。 Dim RestLength As Integer = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str) - Start + 1 If
Length = 0 OrElse Length > RestLength
Then '▼切り抜き Dim
SJIS As System.Text.Encoding =
System.Text.Encoding.GetEncoding("Shift-JIS") Array.Copy(SJIS.GetBytes(str), Start - 1, B, 0, Length) Dim st1 As String = SJIS.GetString(B) '▼切り抜いた結果、最後の1バイトが全角文字の半分だった場合、その半分は切り捨てる。 Dim ResultLength As Integer = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(st1) - Start + 1 If
Asc(Strings.Right(st1, 1)) = 0
Then End Function |
使用例
Dim
St As String =
"VB中学校" Dim
Result1 As String
= Mid(St, 2, 3)
'B中学 |
VB6ではStrConv関数とMidB関数を組み合わせて同じことが実現できます。VB6ではMidBはあらかじめ組み込まれている関数です。