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
[ ツッコむ ]
以上です。