WSN追加案(関数): クーポンの検索と名前の取得(FINDCOUPON, GETCOUPON)
Issue #766
resolved
これまでのCWでは、母:***
というようなクーポンを検索してその値を取得する、というような事はできませんでした。
これを行うには、クーポンの検索とその値の取得という機能が必要になります。これらはおそらく分離した方がうまくいきます。
FINDCOUPON(<キャラクター番号>, <検索文字列>)
… ワイルドカードで任意のキャラクターの所持クーポンを検索し、見つかったら1~の数値で返す。見つからなかった場合は0を返す。GETCOUPON(<キャラクター番号>, <クーポン番号>)
… クーポンの名前を文字列で返す。見つからなかった場合、番号が不正な場合は空文字列を返す。
これと#764を組み合わせると以下のように書けるはずです。
GETCOUPON(SELECTED(), FINDCOUPON(SELECTED(), "母:*"))
Comments (4)
-
reporter -
reporter 単純なワイルドカードでは、
*
や?
を含むクーポンの検索が正しくできません。しかしワイルドカードにエスケープ文字を入れるというのも一般的ではありません。そこで、少し拡張してglob方式を使う事を考えています。これなら、
[*]
や[[]
とする事で文字をエスケープする事ができます。 -
reporter pull request #2440
上記の通り実装しました。
-
reporter - changed status to resolved
実装済みなのでクローズします。
- Log in to comment
GETCOUPON
の名前ですが、他の関数に合わせてCOUPONTEXT
にした方がよさそうです。こうしておけば、将来得点を取得する関数がほしくなった時にはCOUPONVALUE
という名前にできます。また、
FINDCOUPON
で検索開始位置を指定できるようにしたいです。該当するクーポンが複数ある場合、全て探索する方法があった方がよいからです。以下のようになります。FINDCOUPON(<キャラクター番号>, <検索文字列>[, <開始位置(1~)>])
開始位置が0の場合には常に0を返すようにしておくべきか、あるいは最初から検索されるようにしておくべきかは、少し考える必要があります。私としては前回の戻り値を次の呼び出しの引数で渡すような連続処理を考えた時に、開始位置0に対しては0が返ってきた方が使い勝手がよさそうな気がします。