mieki256's diary



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 に指定する変数は文字列変数で問題無かった。

2023/10/24追記 :

せっかくだから、notesel, noteload, notesave を使った動作確認用のサンプルも置いておく。.ini ファイルを noteload で読み込んで、変数の値を取得して、また .ini に notesave で書き戻す処理をしている。

_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

以上です。

過去ログ表示

Prev - 2023/10 - Next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project