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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0320
エイカbsaveで以前記録した配列変数データを、配列を増やしてbloadした場合2解決


エイカ

リンク

2018/3/20(Tue) 08:28:48|NO.82777

どうも、お世話になっております
hsp3dishの場合での話です。


dim gdata,60,36,30 bsave "mn-gdata.sav",gdata
このように一度したものを

dim gdata,60,36,60 bload "mn-gdata.sav",gdata
とした場合
変数の中身は、どうなるのでしょうか?
単純に、以前入ってた値の所だけ入って
以前宣言してなかった所は0なのでしょうか?

また、逆の場合もお教え頂きたいです。
よろしくお願いします。



この記事に返信する


あまら

リンク

2018/3/21(Wed) 01:51:22|NO.82787

試してみた方が手っ取り早いという事で、
実際にやってみました。

念のため実機でも確認しましたが、Windows上での実行結果と同じで

保存データサイズ < 読み込みデータサイズ の場合は
エイカさんの予想通り、余っている箇所は0が入り他は全て同じでした。

逆に
保存データサイズ > 読み込みデータサイズ の場合
gdata(0,0,0)など両方に存在する配列の数値は一致しているものの、
読み込みデータに無い配列は切り捨てられているようです。
(無理に参照するとエラーになります)


以下確認用ソース
さすがに60とかだと確認が面倒なので
保存:dim gdata, 2, 3, 4
読込:dim gdata, 2, 3, 5
とさせていただきました。

#include "hsp3dish.as" d1 = 2; d2 = 3; d3 = 4; buf = ""; dim gdata, d1, d2, d3; repeat d1 p1 = cnt; repeat d2 p2 = cnt; repeat d3 gdata(p1, p2, cnt) = rnd(100); // 適当な数値を格納 loop loop loop gosub *print_data; // 全て表示 bsave "mn-gdata.sav", gdata; // 一旦保存 d3++; dim gdata, d1, d2, d3; // 配列の要素を変更して初期化 bload "mn-gdata.sav", gdata; // 読み込み gosub *print_data; // 全て表示 stop; *print_data redraw 0 color 255, 255, 255:boxf; color 0, 0, 0:pos 0, 0; repeat d1 p1 = cnt; repeat d2 p2 = cnt; repeat d3 buf += strf("%2d", gdata(p1, p2, cnt)); if( (cnt+1) == d3 ) { buf += "\n"; } else { buf += ", "; } loop loop loop buf += "============================\n"; mes buf; redraw 1 return;
ちなみに配列が(ほぼ)一致するのは、配列の最後の数値の増減だけで

1次元目を変更
保存:dim gdata, 2, 3, 4
読込:dim gdata, 5, 3, 4

2次元目を変更
保存:dim gdata, 2, 3, 4
読込:dim gdata, 2, 5, 4

のように別の箇所が変わっていた場合は入る数値の場所が変わります。



エイカ

リンク

2018/3/21(Wed) 02:41:45|NO.82788

ご返答、ありがとうございます。

私では実験のスプリクトが思いつきそうになかったので
助かりました。
ありがとうございます。

今後も頑張っていきたいと思います。



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