わいあーど頭痛

「ロスト・エンド・クレイドル」更新情報などのブログ

複数の単語群から検索して結果をリスト化する

謝辞

http://gallnuts.webcrow.jp/1nottips/nottips_tq-autopagination.shtml
を改造して組み込んでいます。
許可をくださったもっしょくしさん、ありがとうございます。

解説

タブ文字は【タブ】ではなくそのままになっています。
お手元の環境に合わせてテキストエディタで一括置換などしてください。

使い方

以下の2つの手順を書いてください。他はお好みで。

呼び出し手順その1
(call,単語群から検索してリスト化,【検索したい文字列を代入した変数名※1】,【検索対象の単語群の名前※2】)

※1 半角カンマが混ざっていると誤作動します。
※2 単語群が複数ある場合は半角カンマ区切りで列挙してください。単語群の名前に半角カンマが混ざっていると誤作動します。

呼び出し手順その2
 (call,pagination,単語群から検索してリスト化)

「一つの単語群から自動でページ付けして一覧を生成する」改造版について

この「単語群から検索してリスト化」に組み込まれている版について疑問がある場合、私(ろすえん)へ問い合わせてください(もっしょくしさんへの問い合わせをしないでください)。

!!関数名を変えていないので、元の版と同居させると誤作動します!!

改造内容
  • 識別子によって出力を分けられるように
  • 選択肢の頭のマークを◆へ変更
  • 取っておく必要のないこの処理独自の単語群の削除処理を「pagination_EraseVar」へ入れました
改造の影響
  • 呼び出し方が変わります
(call,pagination,【識別子】)
  • 設定に使う単語群の名前
    • 【識別子】_Sepalator
    • 【識別子】_ItemPerPage
    • 【識別子】_TalkOfIndexHead
    • 【識別子】_Source
      • 【識別子】_Sourceは「単語の追加」関数で使うので、この処理では直接的には書いていません

単語群の重複回避

単語群の重複回避を処理中で行っています。
OnSatoriLoadなどで既に書かれているものを上書きされると困る場合は、

  • この処理の重複回避の行を消す
  • 検索終了後に重複回避を設定しなおす

などしてください。

外部入力

外部入力を読み上げるので、対策を行っています。
この処理では「Rポストと狛犬」のdic00_system.txtにある関数「KillDangerousTag」を使っています。
「SWポストと狛犬」の場合は(vncall,さくらスクリプト無効化,R0)とするなど、お手元のゴーストさんに合わせてください。

利用例

呼び出し部分

*qが押された
>単語検索デモ_入口

*単語検索デモ_入口
:\![open,inputbox,On単語検索デモ_検索して結果を,0,"検索したい文字をここへ入力"]なにか言葉を入力していただければ、単語群「さかな」「おにく」「るいじ」から合致する要素をリスト化して表示します。\x

*On単語検索デモ_検索して結果を
>単語検索デモ_入口	(vncall,length,R0)==0
$単語群から検索してリスト化_検索語	(vncall,KillDangerousTag,R0)
$temp	(nop,(call,単語群から検索してリスト化_検索,単語群から検索してリスト化_検索語,さかな,おにく,るいじ))
>単語検索デモ_検索結果がゼロ	(単語群「単語群から検索してリスト化_Source」の存在)==0
>単語検索デモ_検索結果がゼロ	(単語群「単語群から検索してリスト化_Source」の数)<=0
(call,pagination,単語群から検索してリスト化)
#2行目 「KillDangerousTag」関数は「Rポストと狛犬」のdic00_system.txtにあるものです
##お手元の環境に合わせて書き換えてください
#3行目 nopの中に書くことで変数が空代入される→変数が保存されないのでセーブデータを汚さない

*単語検索デモ_検索結果がゼロ
:\![open,inputbox,On単語検索デモ_検索して結果を,0,"検索したい文字をここへ入力"]「(単語群から検索してリスト化_検索語)」に合う要素は無いようです。\x\![raise,単語検索デモ_入口]

本体(必須)

@単語群から検索してリスト化_検索
(追加単語の全削除、単語群から検索してリスト化_Source)φ
(when,(Aの数)<=1,「単語群から検索してリスト化」の引数が少ないです,
	(for,1,(calc,(Aの数)-1),1,(vncall,単語群から検索してリスト化_検索その1,A0,A(C0)))
)φ
(set,単語群から検索してリスト化_今回の単語,)

*単語群から検索してリスト化_検索その1
$単語群「(A1)」の重複回避	降順、トーク中
$単語群から検索してリスト化_ループ用	(nop,(単語群から検索してリスト化_検索その2))
#ここで単語群の重複回避を行っています

@単語群から検索してリスト化_検索その2
(for,1,(単語群「(A1)」の数),1,
	(set,単語群から検索してリスト化_今回の単語,((A1)))φ
	(when,(vncall,count,単語群から検索してリスト化_今回の単語,(A0))>0,
		(単語の追加,単語群から検索してリスト化_Source,(単語群から検索してリスト化_今回の単語))
	)
)

#----------------「一つの単語群から自動でページ付けして一覧を生成する」改造版ここから----------------

#呼び出し受け部分
@pagination
(call,pagination_Initialize,(A0))(call,pagination_Display,(A0))
#リスト初期値設定部分
@pagination_Initialize
(nop,
(set,単語群「(A0)_Source」の重複回避,降順、トーク中)
(set,ItemNum,(単語群「(A0)_Source」の数))
(set,ItemList,
(times,(ItemNum),
((A0)_Source)((A0)_Sepalator)
)
)
(set,LastPage,
(ItemNum)/((A0)_ItemPerPage)
+
((ItemNum)%((A0)_ItemPerPage)>0)
)
(set,CurrentPage,1)
)
#リスト表示部分
*pagination_Display
$今回は自動アンカー	無効
\0\b[2]\*\_q((A0)_TalkOfIndexHead)
(when、(LastPage)==1
、           [(CurrentPage)φ/(LastPage)]
、        \q[<,OnTurnOver,-1] [(CurrentPage)φ/(LastPage)] \q[>,OnTurnOver,1]
)
(nop,(split,(ItemList),((A0)_Sepalator)))
(times,((A0)_ItemPerPage),((A0)_ItemPerPage)*((CurrentPage)-1),
(when(バイト値、1)(ItemNum)>(C0)
(バイト値、1)\__q[(S(C0))]◆(S(C0))\__q\n
(バイト値、1)\n
)
)
\n\q[◆閉じる,script:\e]\_q
#ページめくり処理
*OnTurnOver
(set,_x,(CurrentPage)+(R0)
)(when,(_x)>(LastPage)
,(set,CurrentPage,(_x)%(LastPage))
,(when,(_x)<1
,(set,CurrentPage,(LastPage)+(_x)%(LastPage))
,(set,CurrentPage,(_x))
)
)(set,_x,)(pagination_Display)

#変数削除
#ゴーストの終了時にこれを呼ぶとセーブデータを汚しません
#また移植のときにここにある変数名が何かと被っていないか注意して下さい
*pagination_EraseVar
$ItemNum	
$LastPage	
$ItemList	
$CurrentPage	
$単語群から検索してリスト化_単語群削除	(追加単語の全削除、単語群から検索してリスト化_Source)

#設定部分
@単語群から検索してリスト化_Sepalator
(バイト値,1)
@単語群から検索してリスト化_ItemPerPage
18
@単語群から検索してリスト化_TalkOfIndexHead
「(単語群から検索してリスト化_検索語)」の検索結果
#----------------「一つの単語群から自動でページ付けして一覧を生成する」改造版ここまで----------------

単語群とその飛び先

#----------------単語群(例)----------------
@さかな
あじ
まぐろ
さけ
@おにく
とり
うし
ぶた
@るいじ
あじみ
にとり
こうし
さける

#----------------検索結果の飛び先----------------
*あじ
:あじふらい
*まぐろ
:とぅーなー
*さけ
:しゃけ
*とり
:こけっ
*うし
:もーもー
*ぶた
:ぶーぶー
*あじみ
:うめえ
*にとり
:しんせいひんがやすい
*こうし
:んもーぅ
*さける
:ずぼん