文字列の順序を並べたい時があります。例えば、「あいうえお」を「おえういあ」にしたり、「aabbccddee」を「eeddccbbaa」にしたり。Little Endian と Big Endian のバイトオーダーを変更したいときにも使えます。例えば「0a3c0434」を「34043c0a」にしたりとか。
そんな時に使えるファンクションを書いてみました。並び替えの効率は良くないかもしれませんが、単純に入力文字列を指定した文字単位数ごとに配列に代入し、代入された配列の後ろから再度連結させるだけのものです。
引数の1つめが入力文字列、2つめは1ブロックの単位 (例えば2文字区切りにしたい場合は 2)、3つめは並び替えられた文字列です。簡単なエラー処理を加えているので関数自身は Integer 型のエラーを返します。0 は NOERROR、1 は Unit の長さが1以上以外のエラー、2 は割り切れないエラーです。
そんな時に使えるファンクションを書いてみました。並び替えの効率は良くないかもしれませんが、単純に入力文字列を指定した文字単位数ごとに配列に代入し、代入された配列の後ろから再度連結させるだけのものです。
引数の1つめが入力文字列、2つめは1ブロックの単位 (例えば2文字区切りにしたい場合は 2)、3つめは並び替えられた文字列です。簡単なエラー処理を加えているので関数自身は Integer 型のエラーを返します。0 は NOERROR、1 は Unit の長さが1以上以外のエラー、2 は割り切れないエラーです。
Function ReverseOrder(expr As String, unitLen As Integer, result As String) As Integer
Dim exprLen As Integer
Dim index As Integer
Dim tmp() As String
ReverseOrder = 0 '0 = NOERROR
result = ""
'### ERROR 1 = Unit の長さは 1 以上のみ
If unitLen =< 0 Then
ReverseOrder = 1
Exit Function
End If
'=== 配列化
exprLen = Len(expr)
If (exprLen Mod unitLen) = 0 Then
index = (exprLen / unitLen) - 1
Redim tmp(index)
For i = 0 To index
tmp(i) = Mid(expr, (i * unitLen) + 1, unitLen)
Next
Else
'### ERROR 2 = Unit の長さでインプット文字列が割り切れない
ReverseOrder = 2
Exit Function
End If
'=== 配列の後ろから並び替え
For i = index To 0 Step -1
result = result + tmp(i)
Next
End Function