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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0930
たくろうbloadの数値がおかしい10未解決


たくろう

リンク

2017/9/30(Sat) 05:01:32|NO.81517

saveファイルを複数保存して
bloadで読み込むだけなのですが
一つのファイルに一つずつ0.32.64.96といれてるはずが
48とかでてきます
その後は桁違いな数字がでてきます
bloadは使ってたあとstrsizeにサイズがはいるらしいですが
使ってないし、なぜ見当違いな数字がでるかわからないです



この記事に返信する


掘木

リンク

2017/9/30(Sat) 08:55:36|NO.81518

48 , 12851 , 13366 , 13881
ってなっているなら間違いなく変数の型の問題。

bsave-bloadに変数の型の保証はないので
bload、bsaveで使用する変数の型はプログラマが合わせる必要があります。



沢渡

リンク

2017/9/30(Sat) 10:28:38|NO.81519

ああ、48って「0」という文字の文字コードですね。
文字列変数をそのままbsaveしてしまって、それを整数変数に対してbloadしていると。

a="0" bsave "test.dat",a bload "test.dat",b mes b //実行すると48と表示される。



たくろう

リンク

2017/9/30(Sat) 23:49:33|NO.81524

ええとbloadした時に文字だから48なるとして
出してから型を変えるんですが変わりません
保存した型から変更できないという事ですか?
配列とかで確か型変更できないみたいなのあった気もしますが
ヘルプには書かれてないからわかりにくいですね、自分が見てないだけかもしれないですが



Y_repeat

リンク

2017/10/1(Sun) 00:26:52|NO.81525

代入するんじゃなくてpokeで書き込むんですよ
簡単なサンプルスクリプト書きましたが
あえて伏せておきます



暇人

リンク

2017/10/1(Sun) 02:36:30|NO.81526

型は入ってる内容で決まるんじゃなく
変数を作った時に決まる
型の変更は作り直しと同じ
文字列型変数にbloadすれば内容は文字列として処理出来る
文字列の読み込みは普通noteloadを使う(変数が読み込まれるサイズによって自動拡張される)



たくろう

リンク

2017/10/1(Sun) 03:44:08|NO.81527

お返事ありがとうございます
先ほどのはintにして正常に数字として使用できました
ですが新しく数字の0で変数作って
文字にしてstrlenで文字数とって
また数字にして保存しました
テキストには空白があります
ですが、文字で保存したらテキストには0があります
変数を作った時と言うことなので最初の方に文字列で作ってみてやっても変化ありませんでした
普段はnote使ってましたが膨大な場合速度に不満があってbsaveみたいに細やかなやり方したくて今はちょっとこだわりぎみです
構造体でしたっけ?直接いじりたいですが落ち着いてからやりたいと思ってます



たくろう

リンク

2017/10/1(Sun) 04:56:07|NO.81528

すいません、空白はテキスト名勘違いとかで片付きました汗



KA

リンク

2017/10/1(Sun) 11:25:34|NO.81532

「文字としての数字」と「数値としての数字」の違い。
文字列変数としての文字終端はヌル。
数値のエンディアンに対する理解。

この辺を良く理解していないと、質問の様な状態になります。



沢渡

リンク

2017/10/2(Mon) 20:15:27|NO.81541

ちょっと文章を読んでも、何が問題で、何を困っているのかよくわからないのですが……、

空白の文字列を整数に変換した場合は、変換後は数値の「0」になります。
その数値の「0」を文字列に再変換した場合、変換後は文字列の"0"になります。
ですから「テキストには0があります」というのは当然のことです。

そもそも、数値をそのまま保存できるのがbsaveの良いところなのに、
なぜいちいち文字列に変換するのでしょうか?
文章を読んだ限り、現状では変数ひとつにつき1ファイルに保存しているのだと思われますが、
過去にこちらのスレにbsaveとbloadの使い方を書いていますので、参考までに。
http://hsp.tv/play/pforum.php?mode=pastwch&num=79008


あと、暇人氏の補足ですが、

>型は入ってる内容で決まるんじゃなく
>変数を作った時に決まる
これは、変数の型は、一度決めたら未来永劫変更できないということではありません。
代入文や、変数に数値を入れる命令を実行したタイミングで変数型は変更されます。
しかし、pokeやbloadといったバッファに直接書き込む系の命令では変更されません。

今まで文字列型として使用していた変数aを、これからは整数型として利用したい場合は、
a=0 などとするとよいでしょう。
逆に、今まで整数型として使用していた変数aを、これからは文字列型として利用したい場合は、
a="" などとしましょう。



中村実

リンク

2018/4/8(Sun) 19:58:30|NO.83944

変数を初期化するモジュールを作りました。
以下スクリプトです。

;変数を初期化します ;val=var(p1,p2) ;val:初期化後の変数 ;p1:初期化する変数 ;p2:型(0=int,1=str) ;p2に0,1以外の値を入力した場合、初期化はされません。 #module #defcfunc var var p1,int p2 if p2=0:val=0 if p2=1:val="" return val #global
使い方
初期化後の変数=var(初期化前の変数,変数の型)
変数の型は、0=数値型 1=文字列型
です。
それ以外を入力すると、何も起こりません。



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