Last Update : 2009/03/xx
特定文字列の区切りで文字列を分割切り出しして、指定した変数へと代入する命令です。HSP3(バージョン3.2〜)から登場した新規の命令になります。命令名の由来は、そのまま英単語の「split」(goo辞書)から。getstr命令にじゃっかん近い処理です。
split 元のバッファ, "区切り文字", 代入する変数, 代入する変数, ・・・
第1パラメータには分割区切りの対象となる大元の文字列型変数を指定します。第2パラメータで区切りとなる文字を指定します。第3パラメータ以降は切り出した結果を代入するための変数を指定していきます。代入用の変数は「可変長」と呼ばれるタイプで、split命令にどんどん付け足して指定できます。
システム変数statには、split命令により分割した数が返ります。
「/」(スラッシュ)を区切りに分割切り出しして、指定した各変数へと文字列が代入されます。
// 切り出して各変数に代入 [HSP 3.2〜] buf = "HSP/split/命令/講座" split buf, "/", a, b, c, d mes stat mes a mes b mes c mes d
「,」(コンマ)を区切りに分割切り出しします。代入用の変数が1つだけならば、文字列型配列変数として切り出した文字列が各要素に代入されます。切り出した文字列の量が多くてもバッファの自動拡張機能が働いてバッファオーバーフローエラーになりませんが、少しでもパフォーマンスを落としたくないなら、あらかじめsdim命令で文字列型配列変数のサイズと要素数を確保してください。
// 切り出して文字列型配列変数として代入 [HSP 3.2〜] buf = "HSP,split,命令,講座" mes buf split buf, ",", kekka mes stat repeat stat mes kekka(cnt) loop
複数ある区切りを組み合わせてみます。システム変数statの分割数をチェックしてループさせます。
// 区切りの複数組み合わせ [HSP 3.2〜] buf = "HSP:エイチエスピー,split:スプリット:すぷりっと,hoge:ほげ" mes buf split buf, ",", kekka1 repeat stat split kekka1(cnt), ":", kekka2 mes kekka1(cnt) repeat stat mes "\t"+kekka2(cnt) loop loop
切り出した結果を代入する変数を指定しなかった場合は、システム変数statを見ることで、指定文字の出現カウント機能として利用できます。
// 指定文字のカウント [HSP 3.2〜] buf = "HSP:@@::あいHSP3うえお::HSP,;ABCD/HSP\\" mes buf split buf, "HSP" mes ""+(stat - 1)+" コ"