Lunatic Sol

IT Tips

ReverseOrder

2004-06-16 13:34:06 | LotusScript
文字列の順序を並べたい時があります。例えば、「あいうえお」を「おえういあ」にしたり、「aabbccddee」を「eeddccbbaa」にしたり。Little Endian と Big Endian のバイトオーダーを変更したいときにも使えます。例えば「0a3c0434」を「34043c0a」にしたりとか。

そんな時に使えるファンクションを書いてみました。並び替えの効率は良くないかもしれませんが、単純に入力文字列を指定した文字単位数ごとに配列に代入し、代入された配列の後ろから再度連結させるだけのものです。

引数の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

最新の画像もっと見る