玄関へお回り下さい。
文字列を指定の幅(バイト数)にカットする(漢字分断回避)        (SNo.016)
使用コントロール Button1
その他条件 WindowsXP  Visual Basic .NET 2003・VB2005
  
★ 文字列を指定の幅(バイト数)にカットする(漢字分断回避)

Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
    Debug.WriteLine("[" & fStrCut("ABCあいう", 4) & "]")    '結果  [ABC ]
    Debug.WriteLine("[" & fStrCut("ABCあいう", 9) & "]")    '結果  [ABCあいう]
    Debug.WriteLine("[" & fStrCut("ABCあいう", 12) & "]")   '結果  [ABCあいう ]
End Sub

Private Function fStrCut(ByVal Mystring As StringByVal nLen As IntegerAs String
'文字列を指定のバイト数にカットする関数(漢字分断回避)
   
Dim sjis As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
   
Dim TempLen As Integer = sjis.GetByteCount(Mystring)
   
If nLen < 1 Or Mystring.Length < 1 Then Return Mystring
   
If TempLen <= nLen Then   '文字列が指定のバイト数未満の場合スペースを付加する
     
Return Mystring.PadRight(nLen - (TempLen - Mystring.Length), CChar(" "))
   
End If
   
Dim tempByt() As Byte = sjis.GetBytes(Mystring)
   
Dim strTemp As String = sjis.GetString(tempByt, 0, nLen)
   '末尾が漢字分断されたら半角スペースと置き換え(VB2005="・" で.NET2003=NullChar になります)
   
If strTemp.EndsWith(ControlChars.NullChar) Or strTemp.EndsWith("・") Then
      strTemp = sjis.GetString(tempByt, 0, nLen - 1) & " "
   
End If
   
Return strTemp
End Function

半角・全角の混在する文字列を同じ半角換算文字長で取り出します。
最後の文字が漢字で、漢字分断がおきたら、半角スペースを付加し、対象文字数が少ない場合は、スペースを補います。
VB6.0で使っていたものを .NET 用に移植したものです。コードを見直し簡略化しました。
VB.NET2003 と VB2005 では、分断された時の末尾の文字が違うようです、VB2005="・" で.NET2003=NullChar になります、従って上記コードはどちらでも使用できるようにしております。




2004/06/10
2006/07/21


VBレスキュー(花ちゃん)
VB.NET2003  VB2005