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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0423
512MBbsaveの時6未解決


512MB

リンク

2007/4/23(Mon) 16:33:25|NO.7691

bsaveの時変数を指定するじゃないですか?
でもたとえば、
マップのデータ・・・2次元変数
その他の制限時間とか・・・普通の変数
これを一つのファイルに保存するにはどうすれば良いのでしょうか?
またそのファイルから取り出すのはどうするのでしょうか?
良かったら教えてください。



この記事に返信する


hsp2年生

リンク

2007/4/23(Mon) 16:49:26|NO.7692

hsp3.1β8のvsaveで可能では?



512MB

リンク

2007/4/23(Mon) 16:52:52|NO.7693

そんなのがあるんですか・・・
でもbsaveでやりたいんです。



りさ

リンク

2007/4/23(Mon) 17:22:58|NO.7694

こんにちわ、りさです。

bsave命令を使う場合は、
一つの大きな変数にまとめて保存することも出来ますし、
オフセットを指定して、繰り返し保存することも出来るかと思います。

取り出すときも同じ要領ですが、どちらにしても多少の手間はかかると思います。

(取り出す時のことを考えて、
 それぞれのデータを分けるために、特殊記号や改行などを入れた方がよいかと思います)



KIMU

リンク

2007/4/23(Mon) 18:22:45|NO.7698

バイナリとしてデータを一本に纏めてセーブロードする方法

//MAP_なんちゃら が作業用メモリの各要素数で 4倍したのがファイルや作業用メモリのオフセットになる //(MAP_LIMITIM-MAP_NO)*4 で使用ファイル or メモリサイズが出せる #enum MAP_NO=0 #enum MAP_LIMITIM #enum MAP_NAME #enum MAP_NAMELAST=20/4 ;20文字分 #enum MAP_NAME_END ;文字列の終わりが0になるように使用する文字数より多く確保するため #enum MAP_DAT mapsiz=10 dim map,mapsiz,mapsiz repeat mapsiz*mapsiz map(cnt\10,cnt/10)=cnt loop mapno=1 limitim=100 sdim mapnam,(MAP_NAME_END-MAP_NAME)*4 mapnam="セーブテスト" button gosub "save",*save button gosub "load",*load button gosub "dat表示",*drw stop *save dim datbuf,(MAP_DAT+mapsiz*mapsiz) ;作業用メモリ memcpy datbuf,mapno,(MAP_LIMITIM-MAP_NO)*4,0,0 memcpy datbuf,limitim,(MAP_NAME-MAP_LIMITIM)*4,MAP_LIMITIM*4,0 memcpy datbuf,mapnam,(MAP_NAME_END-MAP_NAME)*4,MAP_NAME*4,0 memcpy datbuf,map,mapsiz*mapsiz*4,MAP_DAT*4,0 bsave "testmapdat.dat",datbuf title "セーブ完了" return *load exist "testmapdat.dat" if strsize<0 {mes "ファイルがありません":return} dim datbuf,strsize bload "testmapdat.dat",datbuf mapno=0 limitim=0 sdim mapnam,(MAP_NAME_END-MAP_NAME)*4 dim map,mapsiz,mapsiz memcpy mapno,datbuf,(MAP_LIMITIM-MAP_NO)*4,0,0 memcpy limitim,datbuf,(MAP_NAME-MAP_LIMITIM)*4,0,MAP_LIMITIM*4 memcpy mapnam,datbuf,(MAP_NAME_END-MAP_NAME)*4,0,MAP_NAME*4 memcpy map,datbuf,mapsiz*mapsiz*4,0,MAP_DAT*4 title "ロード完了" return *drw color 255,255,255:boxf:color pos 16,100 mes "mapno: "+mapno mes "limitim: "+limitim mes "mapnam: "+mapnam repeat mapsiz*mapsiz pos 150+(cnt\10)*16,160+(cnt/10)*16 mes map(cnt\10,cnt/10) loop return
他にも一つずつファイルに追加してくとか、全部文字列にして保存するとかあると思う
文字列の方が、扱うデータの種類が増えたり減ったりした時の対応が楽かもしれない



KIMU

リンク

2007/4/23(Mon) 22:14:28|NO.7700

>dim datbuf,strsize
これは
dim datbuf,strsize/4
の間違いでした。


変数名をキーとして変数内容を文字列で保存して
マップデータはバイナリで保存する方法


mapsiz=10:dim map,mapsiz,mapsiz:mapno=1:limitim=100 instrset="mapno=","limitim=" button gosub "save",*save button gosub "load",*load stop *save sdim datbuf,64 ;作業用バッファの初期化 datbuf=instrset(0)+mapno+"\n"+instrset(1)+limitim memexpand datbuf,strlen(datbuf)+1+mapsiz*mapsiz*4 ;作業用バッファを拡張(文字列の終わりに0が必要なので+1) memcpy datbuf,map,mapsiz*mapsiz*4,strlen(datbuf)+1,0 ;文字列数+1からmapをコピー bsave "test2mapdat.dat",datbuf title "セーブ完了" return *load exist "test2mapdat.dat" if strsize<0 {mes "ファイルがありません":return} sdim datbuf,strsize ;dimじゃ無いのでファイルサイズをそのまま使用 bload "test2mapdat.dat",datbuf foreach instrset idx=instr(datbuf,0,instrset(cnt)) if idx>=0{ ;キーが見つかった物だけデータを取り出す getstr strtmp,datbuf,idx+strlen(instrset(cnt)),0 if instrset(cnt)="limitim=" {limitim=int(strtmp)} if instrset(cnt)="mapno=" {mapno=int(strtmp)} } loop dim map,mapsiz,mapsiz memcpy map,datbuf,mapsiz*mapsiz*4,0,strlen(datbuf)+1 title "ロード完了" return
こっちのが柔軟性があるかな?



f

リンク

2007/7/7(Sat) 02:38:20|NO.9365

age



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