WSN追加案(関数): クーポンの検索と名前の取得(FINDCOUPON, GETCOUPON)

Issue #766 resolved
k4nagatsuki repo owner created an issue

参照: issue #400, #764

これまでのCWでは、母:***というようなクーポンを検索してその値を取得する、というような事はできませんでした。

これを行うには、クーポンの検索とその値の取得という機能が必要になります。これらはおそらく分離した方がうまくいきます。

  • FINDCOUPON(<キャラクター番号>, <検索文字列>) … ワイルドカードで任意のキャラクターの所持クーポンを検索し、見つかったら1~の数値で返す。見つからなかった場合は0を返す。
  • GETCOUPON(<キャラクター番号>, <クーポン番号>) … クーポンの名前を文字列で返す。見つからなかった場合、番号が不正な場合は空文字列を返す。

これと#764を組み合わせると以下のように書けるはずです。

GETCOUPON(SELECTED(), FINDCOUPON(SELECTED(), "母:*"))

Comments (4)

  1. k4nagatsuki reporter

    GETCOUPONの名前ですが、他の関数に合わせてCOUPONTEXTにした方がよさそうです。こうしておけば、将来得点を取得する関数がほしくなった時にはCOUPONVALUEという名前にできます。

    また、FINDCOUPONで検索開始位置を指定できるようにしたいです。該当するクーポンが複数ある場合、全て探索する方法があった方がよいからです。以下のようになります。

    FINDCOUPON(<キャラクター番号>, <検索文字列>[, <開始位置(1~)>])

    開始位置が0の場合には常に0を返すようにしておくべきか、あるいは最初から検索されるようにしておくべきかは、少し考える必要があります。私としては前回の戻り値を次の呼び出しの引数で渡すような連続処理を考えた時に、開始位置0に対しては0が返ってきた方が使い勝手がよさそうな気がします。

  2. k4nagatsuki reporter

    単純なワイルドカードでは、*?を含むクーポンの検索が正しくできません。しかしワイルドカードにエスケープ文字を入れるというのも一般的ではありません。

    そこで、少し拡張してglob方式を使う事を考えています。これなら、[*][[]とする事で文字をエスケープする事ができます。

  3. Log in to comment