HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1012
mamoデータの保存7解決


mamo

リンク

2010/10/12(Tue) 17:29:24|NO.35316

HSPにたどり着き勉強中です。
変数のの保存を行いたいと思い、チェックボックスでの状態の保存と復元をしてみました。
文字データで保存し取り出してintを使って数字として変数へ
このような使い方でよろしいでしょうか。
尚 上書きするにはどうしたらよいでしょう。



;ファイルチェック 無ければ作成 exist "test-x.txt" if strsize=-1 { notesel data notesave "test-x.dat" } ;ファイルの読み込みと変数へ notesel data noteload "test-x.dat" noteget a,0 noteget b,1 noteget c,2 noteget d,3 a=int(strmid(a,-1,1)) b=int(strmid(b,-1,1)) c=int(strmid(c,-1,1)) d=int(strmid(d,-1,1)) ; pos 100,200 objsize 40,30 button "保存",*save ; チェックボックス pos 100,10 objsize 142, 30 chkbox "aaa",a pos 100,50 objsize 142, 30 chkbox "bbb",b pos 100,90 objsize 142, 30 chkbox "ccc",c pos 100,130 objsize 142, 30 chkbox "ddd",d stop *save notesel data noteadd "aaa="+a,0 noteadd "bbb="+b,1 noteadd "ccc="+c,2 noteadd "ddd="+d,3 notesave "test-x.txt" mes "保存しました"



この記事に返信する


たんす

リンク

2010/10/12(Tue) 20:17:29|NO.35319

読み込み元ファイルの拡張子が".dat"であり、
状態保存先ファイルの拡張子が".txt"になっているため
次回起動時に変数がリセットされているようです。

読み込みと保存を同じファイルにすることで前回の状態を読み込めました。

;//前略 *save notesel data noteadd "aaa="+a,0 noteadd "bbb="+b,1 noteadd "ccc="+c,2 noteadd "ddd="+d,3 ; notesave "test-x.txt" ;//保存先の変更 notesave "test-x.dat" mes "保存しました"



mamo

リンク

2010/10/12(Tue) 21:43:54|NO.35322

ご指摘ありがとうございます
編集途中の半端な状態をコピペしてしまいました;
(保存ファイルの名前・拡張子は同じにしてあります)

保存されたファイルを確認すると、上書きされずに追加されています。
これを上書きとしたいのと、データ保存の手法として問題ないか教えてもらいたいと思います。



字がキタナイ

リンク

2010/10/12(Tue) 22:05:33|NO.35323

上書きについては、とりあえず、noteselで指定している
dataを、中身が必要なくなった時点で""で初期化してから、
あらためて、dataに追加して、ファイルに書き出せば、
大きくはならないようです。

HSPでのファイル保存方法としては、とりあえず問題は
ないとは思います。




;ファイルチェック 無ければ作成 ;test-x.txtは不要 ;test-x.datに直接データを保存すればいい exist "test-x.dat" if strsize=-1 { ;念のため、dataの中身を空にする data = "" notesel data a = "aaa=0" b = "bbb=0" c = "ccc=0" d = "ddd=0" noteadd a noteadd b noteadd c noteadd d ;a、b、c、d、の変数名と初期値を保存 notesave "test-x.dat" } ;ファイルの読み込みと変数へ ;念のため、dataの中身を空にする data = "" notesel data noteload "test-x.dat" noteget a,0 noteget b,1 noteget c,2 noteget d,3 a=int(strmid(a,-1,1)) b=int(strmid(b,-1,1)) c=int(strmid(c,-1,1)) d=int(strmid(d,-1,1)) ; pos 100,200 objsize 40,30 button "保存",*save ; チェックボックス pos 100,10 objsize 142, 30 chkbox "aaa",a pos 100,50 objsize 142, 30 chkbox "bbb",b pos 100,90 objsize 142, 30 chkbox "ccc",c pos 100,130 objsize 142, 30 chkbox "ddd",d stop *save ;dataの中身を空にしておかないと、test-x.datがどんどん大きく ;なっていく。 data = "" notesel data noteadd "aaa="+a,0 noteadd "bbb="+b,1 noteadd "ccc="+c,2 noteadd "ddd="+d,3 notesave "test-x.dat" mes "保存しました"



mamo

リンク

2010/10/13(Wed) 01:13:28|NO.35327

="" なるほど〜 です。
ありがとうございました。



mamo

リンク

2010/10/13(Wed) 01:15:57|NO.35328

解決のチェック入れ忘れましたm(__)m



字がキタナイ

リンク

2010/10/13(Wed) 03:36:39|NO.35329

noteaddで、データを追加ではなく、上書きする方法が
ありました。

noteadd "aaa="+a,0,1のように、3番目のパラメータが1だと、
データを追加ではなく、上書きします。

data を一度クリアして、追加モードであらためてnoteaddする
のもいいんですが、データが大量になると、非常に面倒なので、
noteaddで、上書き指定するほうが、スマートでしょう・・・。

ただし、dataの中身をクリアしたり、間違って他の場所で追加
モードでnoteaddを使ってたりした状態で、データの一部分だけ
上書きすると、データがおかしなことになるので、そこのとこ
ろは注意したほうがいいです。


あと、今回のこととはあまり関係ないですが、連発してボタンを
クリックして、データを保存してると、"保存しました"のメッセ
ージがどんどん下に表示されていき、ウィンドウ外にまでいっち
ゃいます。



*save ;dataを空にする必要なし。 notesel data ;noteaddの3番目のパラメータを1にする。 noteadd "aaa="+a,0,1 noteadd "bbb="+b,1,1 noteadd "ccc="+c,2,1 noteadd "ddd="+d,3,1 notesave "test-x.dat" mes "保存しました"



mamo

リンク

2010/10/13(Wed) 18:01:54|NO.35333

追加情報をありがとうございます。
noteadd に第三パラメータがあったのですね、頭に残しておきます。
保存したときのメッセージですが、
動きを見るために付けただけなので現状での表示はどうでも良いのです^^;

今度は文字列の保存にぶつかっていますので、別途質問したらよろしくお願いしますm(__)m



ONION software Copyright 1997-2023(c) All rights reserved.