bigLiBox

備忘録だったり。読書メモだったり。ところで仕事が終わりそうにないんですが。

指定されたバイト数になるよう文字列をパディングする

共通処理にパディング演算するメソッドを作る。

以下の条件を指定できるようにしたい

  1. 文字を寄せる方向(右寄せor左寄せ)
  2. パディングするバイト数
  3. 埋め込み文字

パディングといえば
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

参考: