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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0627
tentunloopで作った複数の入力ボックス内のデータの保存方法について4解決


tentun

リンク

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



ken2

リンク

2012/6/27(Wed) 13:53:00|NO.47395

数値のみの配列ならそのまま

bsave"filename",num

bload "filename",num

ではいけないのですか?



MillkeyWeler

リンク

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より)



tentun

リンク

2012/6/27(Wed) 22:24:09|NO.47399

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

>> 質問する際に、数値型変数または、文字列型変数のどちらかで扱うのかが明示されているだけでも
>> 大きく違ってくるので。(ソースから見た感じだと、文字列型変数かな)

勉強不足で申し訳ありません。
扱うのは数字のみなので、sdimじゃなくてdimですね。
そしたら0が表示されるようになったので、
inputの前にnum(cnt)="" を入れてみたら解決しました。
これも勉強になりました。

助かりました!皆さんありがとうございました。



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