〜 ファイル 〜
変数をファイル保存・ファイルデータを変数へ読込

ゲームで使用するアイテム・スコアデータ、ツールのオプションデータ等はHSPの終了と共に消失します。
次回も今回のデータを引継ぎたい場合、HDDやリムーバブルディスク等にファイル出力しましょう。
ただ、書き出すファイルに「ABC=123」と書いたものを読み込んでも、変数ABC123になりません。
やり方としては、bsave命令・notesave命令で設定されたデータを格納した変数を保存し、
起動時にbload命令・noteload命令で設定先変数にデータを入れてあげましょう。
ファイルに保存するには、それぞれの変数を1つのファイルに追記保存する形でもよいのですが、
保存用の変数1つにまとめて、ファイルを上書き保存する形にする方がスマートかもしれません。
1つにまとめる形式にした場合、元の変数の格納順や、変数毎の区切りはコンマにする、改行にする…等
読み込むときに逆のやり方ができればどんなやり方であってもかまいません。
「■バイト目から★バイトを変数●のデータとする」とする場合には変数毎の区切りは必要ありませんが、
文字列の余った部分はスペースを埋めて、スペースまでの文字を必要なデータとして変数にロードする、
数値は前ゼロを付けて保存する等、全てを固定長に統一しなければ後ろ側にあるデータ位置がズレます。
スペースやスラッシュ、コンマ等の特定文字までを1つのデータとして取り出す場合、
必要データ内に区切りとなる文字を入れてしまうと情報が欠落してしまうので注意してください。
この場合、poke命令を利用してキーボードからは入力できない制御文字を区切り文字とすると、
故意に利用者にその文字を使用されない限りは入らないので安心です。故意に使えば自己責任ということで…。
尚、ゲームのデータ等の時には、保存データを直接触られるとマズい場合もあることでしょうが、
その場合は、コチラのやり方等を利用し暗号化するようにしましょう。
ココではサンプルとして、4つのテキストデータを保存する方法を紹介しており、
コチラでは別途、数値の配列変数データをファイル保存するやり方を説明しています。
	
 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
32
33
34
35
	name = "sample.dat"		// 保存先ファイル名
	char = "" : poke char, , 1	// 区切り文字
	sdim file, 129 * 4		// 保存用格納データ
	sdim data, 128, 4
	objsize winx / 2, 40
	pos winx / 2 * 0, 0 : button "保存", *save
	pos winx / 2 * 1, 0 : button "読込", *load
	pos 0
	mesbox data.0, winx, (winy - 40) / 4, 1
	mesbox data.1, winx, (winy - 40) / 4, 1
	mesbox data.2, winx, (winy - 40) / 4, 1
	mesbox data.3, winx, (winy - 40) / 4, 1
	stop

*save
	file = data + char + data.1 + char + data.2 + char + data.3 + char // 区切り文字を付けて連結
	strlen len, file
	bsave name, file, len
	dialog "保存しました"
	stop

*load
	exist name
	if strsize ! -1 {
		bload name, file
		i = 0
		repeat 4
			instr i.1, file, char, i
			strmid data.cnt, file, i, i.1	// オフセットから区切り文字まで読み込む
			instr i.1, file, char, i + 1	// オフセット位置をズラす
			i += i.1 + 2
			objprm cnt + 2, data.cnt
		loop
	}
	stop
 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
	name = "sample.dat"		// 保存先ファイル名
	char = "" : poke char, , 1	// 区切り文字
	sdim file, 129 * 4		// 保存用格納データ
	sdim data, 128, 4
	objsize ginfo_winx / 2, 40
	pos ginfo_winx / 2 * 0, 0 : button gosub "保存", *save
	pos ginfo_winx / 2 * 1, 0 : button gosub "読込", *load
	pos 0
	mesbox data.0, ginfo_winx, (ginfo_winy - 40) / 4, 1
	mesbox data.1, ginfo_winx, (ginfo_winy - 40) / 4, 1
	mesbox data.2, ginfo_winx, (ginfo_winy - 40) / 4, 1
	mesbox data.3, ginfo_winx, (ginfo_winy - 40) / 4, 1
	stop

*save
	file = data + char + data.1 + char + data.2 + char + data.3 + char // 区切り文字を付けて連結
	bsave name, file, strlen(file)
	dialog "保存しました"
	return

*load
	bload name, file
	i = 0
	repeat 4
		data.cnt = strmid(file, i, instr(file, i, char))// オフセットから区切り文字まで読み込む
		i += instr(file, i, char) + 1			// オフセット位置をズラす
		objprm cnt + 2, data.cnt
	loop
	return