TOKENのテスト
v4.0からTOKEN構文が増えたようなので動作テストしてみました。
とりあえずヘルプより抜粋
トークンの切り出し (指定文字で区切ったものを返す) 戻値 = TOKEN( 区切文字, var 文字列, [ 区切方法, ダブルコーテイションフラグ ] ) 引数 区切文字:文字列を区切る文字を指定 文字列 :文字列は区切られた後、残りの文字列を返す 区切方法: FALSE:区切り文字が連続していた場合でも一つずつ取り出す (デフォルト) TRUE :区切り文字が連続していた場合に連続した部分は削除 ダブルコーテイションフラグ: FALSE:"ダブルコーテイション"内も無視して区切る (デフォルト) TRUE :"ダブルコーテイション"の文字は区切らない 戻値 結果の文字列
(1) 通常動作
TOKENを使うと引数で与えられた文字列から区切り文字までの
文字列と区切り文字以降の文字列を分割できるみたいです。
たとえば区切り文字がスラッシュ"/"で
スラッシュより前が"aaa"、スラッシュより後が"bbb"
だったとすると
TOKENを2回呼んだ場合は以下のようになるみたいです。
1回目の戻値="aaa" 2回目の戻値="bbb"
戻値は変数に代入して使用することが可能です。
DIM a = TOKEN("/", str) PRINT "1回目の引き抜いた文字列だよ→" + a DIM b = TOKEN("/", str) PRINT "2回目の引き抜いた文字列だよ→" + b
ちなみに、1回TOKENを呼び出すと、TOKENの第2引数で渡した変数の
値は区切り文字以降の文字列で更新されるようです。
下記の例はstrが空でなくなるまで繰り返すことによって、
区切り文字をすべて取得する例です。
DIM str = "aaa/bbb" WHILE str <> "" PRINT TOKEN("/", str) WEND
結果
aaa bbb
strの変移
呼び出し前="aaa/bbb" 1回目呼び出し後="bbb" 2回目呼び出し後=""
(2) 空文字の無視
第3引数にTRUEを渡すと、区切り文字と区切り文字の間に
何もなかった(空文字となる)場合は、その部分を無視するように
設定できます。(通常は無視しない)
たとえば区切り文字がスラッシュ"/"で
"aaa///bbb"のような文字列があった場合、
通常だと
1回目の戻値="aaa" 2回目の戻値=""(空文字) 3回目の戻値=""(空文字) 4回目の戻値="bbb"
となりますが、
第3引数にTRUEを渡してあげると
1回目の戻値="aaa" 2回目の戻値="bbb"
となります。
(3) ダブルクォートの考慮
第4引数にTRUEを渡すと、ダブルクォートを考慮して動作するようになるみたいです。
要するにダブルクォートで囲んだ部分は文字列だから区切っちゃいやよって意味ですね。
たとえば区切り文字がスラッシュ"/"で
"aaa/ダブルクォートの中にスラッシュ<#DBL>/<#DBL>がある場合/bbb"
のような文字列があった場合、
通常だと
1回目の戻値="aaa" 2回目の戻値="ダブルクォートの中にスラッシュ<#DBL>" 3回目の戻値="<#DBL>がある場合" 4回目の戻値="bbb"
となりますが、
第4引数にTRUEを渡してあげると
1回目の戻値="aaa" 2回目の戻値="ダブルクォートの中にスラッシュ<#DBL>/<#DBL>がある場合" 3回目の戻値="bbb"
となります。