サブルーチン(Split関数を作ってみた)


    $buf = "tanaka,suzuki,yamada,sato";
    call Split $buf, ",";
    while ( #i <= ##return ) {
        $msg = $msg + $ReSplit[#i] + "\n";
        #i = #i + 1;
    }
    message $msg;
    endmacro;

Split:
    while ( ##i < strlen($$1) ) {
        if ( midstr($$1, ##i, 1) == $$2 ) {
            ##cnt = ##cnt + 1;
            $ReSplit[##cnt -1] = midstr($$1, ##start, ##i - ##start);
            ##start = ##i + 1;
        }
        ##i = ##i + 1;
    }
    $ReSplit[##cnt] = midstr($$1, ##start);
    return ##cnt;

サブルーチンは、ラベルで定義しておく。サブルーチンを呼ぶときはcallを使う。

呼び出された方は、引数を「$$1」「$$2」のようにして受け取る。もちろん、数値型は「##1」みたいな。

返り値は、サブルーチン側で「return 返り値」とする。呼び出した方で、この返り値を使うときは「$$return」か「##return」を使う。

サブルーチン内で、「$$」または「##」で始まるのはローカル変数。

VBAのSplit関数みたいなのを作ってみた。返り値は、UBound関数と同じで、最も大きい要素番号(実際は、セパレータの数)。分割した配列は、グローバル配列$ReSplitに格納される。