Lunatic Sol

IT Tips

ノーツ R5 で Split

2003-12-12 14:30:09 | LotusScript
Notes 6 からは Split 関数というものが追加されました。この関数はスペースやカンマなどが含まれた文字列を任意のキーで文字列配列化することができます。これを R5 で使いたい場合、自分でコーディングする必要があります。結構良く使うのでファンクションを書いてみました。

ひとつのファンクションで解決させずに2つのファンクションを使うことで実現してみました。1つめの SxSplit() というのが R5 で Notes 6 の Split() と同じようなことを実現する仕組みです。Notes 6 の Split とほぼ同様ですが、引数が少ないです。最初に文字列、2つめの引数には区切り文字として認識させたいものを書きます。2つめの SxCountQuery は1つめの引数の文字列に、2つめの引数の文字が何回出現するかチェックしているものです。SxCountQuery() 単体でも汎用的に使えそうなので分けてみました。少しは便利に使えそうでしょうか?

Function SxSplit(Byval expression As String, delimiter As String) As Variant
    Dim count As Integer
    Dim i As Integer, p As Integer
    Dim length As Integer
    Dim tmpArray As Variant

    count = SxCountQuery(expression, delimiter)
    Redim tmpArray(count)
    i = 0
    length = Len(delimiter)
    p = Instr(expression, delimiter)
    Do While p > 0
        tmpArray(i) =Left(expression, p - 1)
        i = i + 1
        expression = Mid(expression, p + length)
        p = Instr(expression, delimiter)
    Loop
    tmpArray(i) = expression 'Add the leftover to the last array
    SxSplit = tmpArray
End Function

Function SxCountQuery(Byval expression As String, query As String) As Integer
    Dim count As Integer, p As Integer
    Dim length As Integer
    count = 0
    length = Len(query)
    p = Instr(expression, query)
    Do While p > 0
        count = count + 1
        expression = Mid(expression, p + length)
        p = Instr(expression, query)
    Loop
    SxCountQuery = count
End Function

今後このコードを改良して Notes 6 と同じ引数を持つ関数に変えて、ノーツ R5 でも Notes 6 でも使える Wrapper にしようと思います。