2023/10/23(月) [n年前の日記]
#1 [hsp] HSPのnoteselについて勉強中
今まで書いてたテストサンプルをそろそろスクリーンセーバにしたい。そのためには、設定値をiniファイルから読んだり、設定画面で変更した値をiniファイルに保存しないといけない。そこで、HSP3.6を使ってiniファイルを ―― テキストファイルの類を読み書きする方法について調べているところ。
HSP 3.6 でテキストファイルの読み書きをするなら、notesel, noteadd, notesave, noteload を使うのが一般的らしいのだけど。
_OHDL - notesel
_OHDL - noteadd
_OHDL - notesave
_OHDL - noteload
_HSP3.0-メモリノートパッド命令
_note〜命令 (テキストファイルを扱うメモリノートパッド) - Let's HSP!
_noteselの初期化について - HSPTV!掲示板
notesel に指定する変数の種類がよく分からなくて…。文字列変数でいいのかなと指定してみたらエラーが出たので、文字列配列にしたら上手く行ったのだけど、しかし巷の解説記事を眺めたらやはり文字列変数でOKらしくて、おかしいな、変だなと…。
どうやら noteadd を呼ぶあたりで何か間違った記述をしていただけらしい。最低限の処理だけ別ソースで書いて動作確認してみたら、notesel に指定する変数は文字列変数で問題無かった。
HSP 3.6 でテキストファイルの読み書きをするなら、notesel, noteadd, notesave, noteload を使うのが一般的らしいのだけど。
_OHDL - notesel
_OHDL - noteadd
_OHDL - notesave
_OHDL - noteload
_HSP3.0-メモリノートパッド命令
_note〜命令 (テキストファイルを扱うメモリノートパッド) - Let's HSP!
_noteselの初期化について - HSPTV!掲示板
notesel に指定する変数の種類がよく分からなくて…。文字列変数でいいのかなと指定してみたらエラーが出たので、文字列配列にしたら上手く行ったのだけど、しかし巷の解説記事を眺めたらやはり文字列変数でOKらしくて、おかしいな、変だなと…。
どうやら noteadd を呼ぶあたりで何か間違った記述をしていただけらしい。最低限の処理だけ別ソースで書いて動作確認してみたら、notesel に指定する変数は文字列変数で問題無かった。
◎ 2023/10/24追記 :
せっかくだから、notesel, noteload, notesave を使った動作確認用のサンプルも置いておく。.ini ファイルを noteload で読み込んで、変数の値を取得して、また .ini に notesave で書き戻す処理をしている。
_notesel_test.hsp
_notesel_test.ini
_notesel_test.hsp
; notesel, noteload, notesave のテスト ; .ini を読んで、値を少し変えて、また .ini に書き戻してみる ; #uselib "kernel32" ; #func GetModuleFileName "GetModuleFileNameA" int, int, int #define INI_FILE "notesel_test.ini" #packopt name "notesel_test" ; exe filename #packopt type 0 ; generate ".exe" ; ---------------------------------------- ; load ini file ini_filepath = INI_FILE mes "Load " + ini_filepath + "\n" buf = "" notesel buf exist ini_filepath ; ファイル存在チェック if strsize = -1 { ; not found ini file dialog "Not found " + ini_filepath, 0 end } else { ; iniファイルを読み込む noteload ini_filepath mes buf ; 1行ずつ内容を解析して記録 sdim ld, 512 repeat notemax noteget ld, cnt ; 1行分を取得 if instr(ld, 0, "test1=") >= 0 { split ld, "=", kind, cmd test1 = int(cmd) } if instr(ld, 0, "test2=") >= 0 { split ld, "=", kind, cmd test2 = int(cmd) } loop } noteunsel mes "test1=" + test1 mes "test2=" + test2 ; ---------------------------------------- ; change value wait 100 test1 += 1 test2 += 1 mes "\nAdd +1" mes "test1=" + test1 mes "test2=" + test2 wait 100 ; ---------------------------------------- ; save ini file buf = "" notesel buf noteadd "test1=" + test1 noteadd "test2=" + test2 notesave ini_filepath dialog "Save " + ini_filepath, 0 mes "\nSave " + ini_filepath wait 200 end
_notesel_test.ini
test1=17 test2=25
[ ツッコむ ]
以上です。