投稿
myu314 myu314
変数の型とかDATファイルの形式って調べる方法ないもんですかね? 整数と実数の変数についてはなんとかなったんですが… VAR A=1 OPTION DEFINE VAR B=1 ?IS_FLOAT(A) ?IS_FLOAT(B) DEF IS_FLOAT V OUT F F=V:F=0.5:F=!!F END
1そうだね
プレイ済み
返信[1]
親投稿
l-oxygen_k KOKO929292
形式というか、ファイルがあるかの確認の例。 IF CHKFILE("DAT:○○○○")==TRUE THEN PRINT "ありました。" ELSE PRINT "ざんねん…" ENDIF この例は、ファイルがあったら『ありました。』と なかったら『ざんねん…』とメッセージを出す例。
0そうだね
プレイ済み
返信[2]
親投稿
けい kei0baisoku
命令表とにらめっこしてみましたが思い付きませんでした。 一番いい線行ったのが、×2してから配列と組み合わせてLEN()の返り値が1か否かで判別できないか的な方向。 どうしても先に文字列かどうかの判断が要ります………
0そうだね
プレイ済み
返信[3]
親投稿
otta777 otta777a
変数の型を省略して扱えるのは倍精度実数型と整数型なので その2種類が分かれば充分かと思いますがいかがですか? DATファイルにセーブした配列変数の型が分からない場合は 倍精度実数型で読み込んでおけばデータが化けることは ありません。 倍精度実数型でセーブしたものを整数型で読み込むと整数 部分しか格納されないためデータが化けます。
0そうだね
プレイ済み
返信[4]
親投稿
myu314 myu314
>Mb.ソースかつさん CHKFILEで形式も取れるようにしてくれると良かったんですけどね:) >けいさん 配列と組み合わせるというのは可能性ありそうだなと思ったのですが,僕も上手くできませんでした. 無理なのかなぁ…. >otta777さん ファイルの送受信/ファイルビューアを考えていたのですが,整数配列のDATを実数で扱って保存するとファイルサイズが倍ちかくになってしまうのと,多次元配列の場合は次元が違うとtype mismatchなのでどうしようかなと. 変数の型判断はそこからの派生です. こっちは確かに実数で扱ってしまえばあまり問題はおきないですね.
0そうだね
プレイ済み
返信[5]
親投稿
l-oxygen_k KOKO929292
↑の返事 そうですね…w SmileBasicにそんな機能があったらSmile×2Basicだったのに(え
0そうだね
プレイ済み
返信[6]
親投稿
もやしもどき Pseudomoyashi
文字列か数値かの判定、こんな方法を思いつきました。 '引数が文字列ならtrue, 数値ならfalseを返す関数 DEF CHKSTR(X) IF X==X*0 THEN '0と空文字列の判定 BGMPLAY X WAIT 2 RETURN !BGMCHK(0) ENDIF RETURN X==X*1.5 END 0か空文字列が入力されたときに2フレーム待ち&BGMに影響を与えるので、実用的かと言われれば疑問ですが。
0そうだね
プレイ済み
返信[7]
親投稿
けい kei0baisoku
関数の定義に関わらず引数にどんな型も与えられるので、中で型を判断できればオーバーロード的な事が出来るなみたいなのを期待してました。 >もやしもどきさん そっか、空文字除けば1.5かければ判断できるのですね!(°Д°) そこだけでも結構実用できそうです。
0そうだね
プレイ済み
返信[8]
親投稿
myu314 myu314
>もやしもどきさん おお,こんな方法があったか! あとはNaNの時に判定が狂うので, X==Xがfalseの時は実数(NaN)にしてやればばっちりですね:) >けいさん オーバーロード的なこともできますね. プチコンでそこまでしなくてもとは若干思ってますが:p ライブラリ作ってると妙に凝りたくなってしまいます.
0そうだね
プレイ済み
返信[9]
親投稿
myu314 myu314
間違えた.判定狂うのはNaNじゃなくてinfの時だから,X==Xでは判定できない.
0そうだね
プレイ済み
返信[10]
親投稿
myu314 myu314
途中で送ってしまった. inf*0 が NaNになるので文字列判定されたあと, X=X*0:RETURN X==X を追加すればOK.
0そうだね
プレイ済み
返信[11]
親投稿
myu314 myu314
あ,0*infがNaNだから 0か空文字は VAR A#=POW(2,2013) RETURN X*A#==X*A# で判定できました. 全部組み合わせれば,文字列/実数/整数はできますね.
1そうだね
プレイ済み
返信[12]
親投稿
もやしもどき Pseudomoyashi
そうか、InfやNaNのことまで考えてませんでした。 というかそれらを利用すれば普通に演算で空文字列と0を分けられるとは。勉強になります。 (Inf*0って0じゃなくNaNだったのか) >けいさん 実は当初「0や空文字がネックですが」とその辺りだけをコメントするつもりでしたが、投稿直前にふとBGMPLAYに気付いたもので… さすがにちょっとどうなんだとは自分でも思いましたが
0そうだね
プレイ済み
返信[13]
親投稿
けい kei0baisoku
>myu314さん、もやしもどきさん ありがとうございます!(^O^) 大変勉強になりました。 自分では思い付かなかったのですが、もしかしたら誰かが見つけてくれるかもと思ってコメントして良かったです。 オーバーロードもできると分かっていれば、自分でゲーム作る時に楽できそう、というのがやりたい動機です。 近いうちに、ここで分かったことを新規投稿でまとめてみようかなと思います。
0そうだね
プレイ済み
返信[14]
親投稿
myu314 myu314
こちらこそ勉強になりました。 コメントありがとうございました。 数値と文字列の判定はリストも短いですし,結構便利に使えそうな気がしてます. 最近作ってたものの中にファイルもしくはスロットから読み込む関数があったんですが,早速これを一つにまとめてしまおうかと:)
0そうだね
プレイ済み