HSP3掲示板より「hsファイルから命令抽出」という質問。hsファイルはHSPのヘルプブラウザ用のデータが書かれてあるテキストファイル。
処理に時間がかかる原因として、(a)wait命令やtitle命令なんてな名前が挙がってますが(原因の1つでなくはないけど)、それ以前にスレ主さんが提示されたHSPコードは無駄が多く、遅くなってしまう原因となる処理がかなーりある感じ。

いちおう「hsp31\hsphelp\src\hhx_db.hsp」にhsファイルを処理するためのHSPモジュールが用意されていたりしますが、あえて素の標準命令でやるとするとこんなところ?
(処理を最適化して、もっと高速化できるコードだけど)
(処理を最適化して、もっと高速化できるコードだけど)
// hsファイルからHSPの命令&関数を列挙 (by 無題な濃いログ)
sdim filelist, 512 // ファイルリスト用にちゃんと確保!
sdim filename
sdim value
sdim funcname
sdim funclist, 4048 * 4 // バッファオーバーフローする量なら増やす
chdir "hsphelp" // 環境に合わせて
dirlist filelist, "*.hs", 1
notesel buf
i = 0
ii = 0
repeat
getstr filename, filelist, i
i + strsize
if strsize = 0 : break
noteload filename
repeat strsize
if peek(buf, cnt) = '%' {
getstr value, buf, cnt + 1
if value = "index" {
getstr funcname, buf, cnt + 8
poke funclist, ii, ""+funcname+"\n"
ii + strsize
}
}
loop
loop
mesbox funclist, 400, 450
- 変数のバッファ確保を必ず!
サイズが足りなくなったら、バッファオーバーフローエラーにならないようHSPがバッファサイズの自動拡張を行ないますが、これにベッタリ頼ると動作パフォーマンスにモロに響きます。sdim命令であらかじめ確保、足りなくなりそうならmemexpand命令で拡張を。
- noteget命令は遅い!
行単位で切り出したければgetstr命令を。
- 文字列の結合代入処理(+=)は遅い!
大きめサイズの文字列同士を結合するとなると、動作パフォーマンスに響いて遅くなります。poke命令で文字列を展開します。(関連)