前回はすべての命令・関数を対象としましたが、今回は特定の文字列を含む命令だけを抽出する方法を紹介します。
と言っても前回HHX_select_all()としていたところを、HHX_select_where(p1, p2, p3)とするだけです。メインの検索処理はモジュールが行ってくれます。
検索結果はキーワード適合度の高い順に並びます。検索キーワードが命令概要(C_SUMMARY)に載っている命令の方が説明(C_INST)に載っている命令よりも適合度が高くなります。
キーワード適合度の強さについては、hsp_db.hsp内のコメントをご覧ください。#include "../hsphelp/src/hhx_db.hsp"
#module
//
// 文字列の右側を半角スペースで埋める
#defcfunc add_spaces str sTarget, local iLength, local sResult
iStrlen = strlen( sTarget )
iLength = 30 - iStrlen
if iLength < 1 : iLength = 1
sdim sResult, iLength + iStrlen + 1
sResult = sTarget
memset sResult, ' ', iLength, iStrlen
return sResult
#global
// hsphelpディレクトリの存在を確認
chdir dir_exe
dirlist s, "hsphelp", 5
if stat == 0 : dialog "hsphelpディレクトリが見つかりません。", 1 : end
chdir dir_exe + "/hsphelp"
// HHXのデータベースをロード
HHX_init_load_db
if HHX_currentset_sum() ! HHX_diskset_sum() {
HHX_init_rebuild_db DBR_WRITEDB
} else {
HHX_init_extract_db
}
// 画面上にオブジェクトを配置
sSerch = "色" : sdim note, 10000 : notesel note
objsize 120, 24 : objmode 2 : font msgothic, 12
input sSerch, ginfo_winx - 120, 24
pos ginfo_winx - 120, 0
button gosub "検索", *serch
pos 0, 24
mesbox note, ginfo_winx, ginfo_winy - ginfo_cy
gosub *serch
onkey gosub *lbl_onkey
stop
// 入力ボックスでEnterを押したとき、検索を開始
*lbl_onkey
objsel -1
if ( wparam == 13 ) & ( stat == 0 ) : gosub *serch
return
// ある条件によってデータベースから検索を行い、その結果を列挙する
*serch
note = ""
db_num = HHX_select_where( sSerch, -1, -1 ) // 検索対象文字を解説などに含む命令・関数を列挙する
repeat db_num
c = HHX_get_next()
sLine = add_spaces( hhxdata( c, C_NAME ) ) + hhxdata( c, C_SUMMARY )
noteadd sLine
loop
objprm 2, note
return
2007年8月16日木曜日
HHXモジュール 命令・関数から検索
ラベル:
HHXモジュールの利用,
HSP,
文字列操作・解析
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿