|
|
2012/6/27(Wed) 10:20:23|NO.47390
今回も初心者のような質問で恐縮なのですが、
お答えいただけるとありがたいです。
9×9の入力ボックスに入力された数値を保存する方法と
再度読み込む方法を教えていただきたいです。
保存するのは数値のみです。
応用力がないみたいで、こちらの掲示板やサイトで
いろいろ調べてやってみたんですが、どうも上手くいきません。
lpokeの行にエラーがありますが、一応スクリプトを載せておきます。
よろしくお願いいたします。
sdim buf,data
screen 0,520,700
objmode 2
;背景色
color 0,0,0 : boxf
;入力ボックス
font "MS UI Gothic" , 30 , 1
#const a 53 ; a:間隔
sdim num, 1 , 81
repeat 81
pos 20 + (cnt\9) * a, 50 + (cnt/9) * a
input num(cnt), 50, 50, 1
loop
;保存ボタン
objsize 105 , 50, 2 : pos 20 , 630 : button "保存" , *save
;開くボタン
objsize 105 , 50, 2 : pos 135 , 630 : button "開く" , *load
stop
font "MS UI Gothic" , 30 , 1
*save;保存???
dialog "nmp", 17,"保存する名前を入力して下さい"
if stat : repeat 81
lpoke data,num(cnt),num(cnt)
bsave file, num(cnt), , (cnt = 0) * -1 + cnt * 256 // 1つのファイルに足していく
loop
stop
*load;開く???
dialog "nmp", 16 , "続きを開く"
if stat{
buf = "" // ゴミが残るのを防ぐ
bload refstr, buf // 変数に読み込む
objprm 0, buf
}
stop
|
|
2012/6/27(Wed) 11:58:31|NO.47394
配列に入力された数値の保存と読み込みなら
arraysaveとarrayloadを使うと楽です。
#include "hsp3util.as"
dim buf , 10 ; input用バッファ
sdim mbuf , 256 , 10 ; 保存用バッファ
dim objno , 10 ; オブジェクトID保存用バッファ
pos 0 , 0
repeat 10
input buf(cnt) , 32 , 24 , 3
objno(cnt) = stat ; オブジェクトIDを記憶
loop
button gosub "SAVE" , *psave
button gosub "LOAD" , *pload
stop
*psave
repeat 10
mbuf(cnt) = str(buf(cnt)) ; 数値を文字列に変換
loop
arraysave "data.txt" , mbuf ; 配列を保存
return
*pload
exist "data.txt"
if strsize = -1 : dialog "読み込むファイルが\nありません" , 1 : return
arrayload "data.txt" , mbuf ; 配列を読み込む
repeat 10
buf(cnt) = int(mbuf(cnt)) ; 文字列を数値に変換
objprm objno(cnt) , mbuf(cnt) ; inputボックスの内容を書き換える
loop
return
|
|
2012/6/27(Wed) 13:53:00|NO.47395
数値のみの配列ならそのまま
bsave"filename",num
bload "filename",num
ではいけないのですか?
|
|
2012/6/27(Wed) 16:06:07|NO.47397
>>数値のみの配列ならそのまま・・・ではいけないのですか?
見た目の問題かなー。最初から数値型変数で扱うと、0が表示されてしまうからかと。
(本来は、数値型で扱うのが一番いいんだけどね)
>>質問者さんへ
数値型変数と、文字列型変数を調べてみよう。
質問する際に、数値型変数または、文字列型変数のどちらかで扱うのかが明示されているだけでも
大きく違ってくるので。(ソースから見た感じだと、文字列型変数かな)
とりあえず、すべてを文字列型で扱う対応版
data=81;(文字数)
sdim buf,data
screen 0,520,700
objmode 2
;背景色
color 0,0,0 : boxf
;入力ボックス
font "MS UI Gothic" , 30 , 1
#const a 53 ; a:間隔
sdim num(cnt),81
repeat 81
pos 20 + (cnt\9) * a, 50 + (cnt/9) * a
input num(cnt), 50, 50, 1
loop
;保存ボタン
objsize 105 , 50, 2 : pos 20 , 630 : button "保存" , *save
;開くボタン
objsize 105 , 50, 2 : pos 135 , 630 : button "開く" , *load
stop
*save;保存???
dialog "nmp", 17,"保存する名前を入力して下さい"
buf=""
file=refstr
if stat{
repeat 81
if num(cnt)="" : num(cnt)="E" //何も入力してないところの対応策
buf+num(cnt)
loop
bsave file,buf,81
}
stop
*load;開く???
dialog "nmp", 16 , "続きを開く"
if stat{
buf = "" // ゴミが残るのを防ぐ
bload refstr,buf,81 // 変数に読み込む
repeat 81
num(cnt)=strmid(buf,cnt,1)
if num(cnt)="E" : num(cnt)="" //何も入力してないところの対応策
objprm cnt,num(cnt)
loop
}
stop
上記スクリプトについて。
一部、文字列型の扱いの制約により、文字列型で扱う際の修正などをしています。
その他は、大体質問者様と同じかなー。
[掲示板書き込み修正記載と著作権関連]
一度、書き込みを修正しています。(回答文及びソースの一部)
ソーススクリプトの著作権は、質問者に帰属します。(2012/10/01より)
| |
|
2012/6/27(Wed) 22:24:09|NO.47399
ご回答ありがとうございます。
>> 質問する際に、数値型変数または、文字列型変数のどちらかで扱うのかが明示されているだけでも
>> 大きく違ってくるので。(ソースから見た感じだと、文字列型変数かな)
勉強不足で申し訳ありません。
扱うのは数字のみなので、sdimじゃなくてdimですね。
そしたら0が表示されるようになったので、
inputの前にnum(cnt)="" を入れてみたら解決しました。
これも勉強になりました。
助かりました!皆さんありがとうございました。
|
|