$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に格納される。