No Programming, No Life

プログラミング関連の話題や雑記

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"

となります。