指定されたバイト数になるよう文字列をパディングする
共通処理にパディング演算するメソッドを作る。
以下の条件を指定できるようにしたい
- 文字を寄せる方向(右寄せor左寄せ)
- パディングするバイト数
- 埋め込み文字
パディングといえば
String.PadRight メソッド とかString.PadLeft メソッド だけど、
これは指定された文字数になるまで埋め込み文字を追加するので、
2バイト文字を含む文字列だと、バイト数がオーバーした文字列が生成されてしまう。
そこでこんな感じ。
''' <summary> ''' パディング ''' </summary> ''' <param name="targetData">対象文字列</param> ''' <param name="yose">寄せ("右"|"左")</param> ''' <param name="keta">桁(バイト数)</param> ''' <param name="moji">埋め込み文字</param> ''' <returns>演算結果データ</returns> Public Shared Function Padding(ByRef targetData As String, ByRef yose As String, ByRef keta As Integer, ByRef moji As String) As String If targetData Is Nothing Then targetData = "" End If Dim value As String = String.Empty 'パディングする文字数を演算 '(文字数 = 桁 - (対象文字列のバイト数 - 対象文字列の文字列数)) Dim padLength As Integer = keta - (System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(targetData) - targetData.Length) If yose.Equals("右") Then '右寄せでパディング value = targetData.PadLeft(padLength, moji.ToCharArray()(0)) ElseIf yose.Equals("左") Then '左寄せでパディング value = targetData.PadRight(padLength, moji.ToCharArray()(0)) End If Return value End Function
参考: