|
|
2023/2/8(Wed) 21:01:43|NO.99088
★まとまった変数から数値型として取り出す。
外部ファイル(A.datなど)から数値を取り出す場合、
noteselもsplitも文字列型になると思うのですが、
そのまま数値型として取り出す方法はありますか?
(元データ:10,20,30,40,50,60,70,....の数字の配列)
dimを記載する必要と書くタイミングが先なのか後なのか、
変数毎に***=int(***)が必要なのか、
よく分かりません;
取り出しが簡単なsplitを使っていますが、
変数が多いと大変です。
割り当ての変数の個数分のintを記載する必要が・・・。
|
|
2023/2/8(Wed) 21:15:46|NO.99089
splitの(ヘルプで言うところの)p2に変数を一つだけ指定すれば、
その変数がアイテムの数に等しい要素数の配列変数として初期化されるので、
それを利用すればそこまで大変ではないと思いますが。
s="10,20,30,40,50,60,70"
split s,",",s2
items=length(s2)
dim x,items
repeat items : x(cnt)=int(s2(cnt)) : loop
repeat items : mes x(cnt) : loop
|
|
2023/2/8(Wed) 22:18:22|NO.99090
dim a,16
// 適当に値をいれる
repeat 16: a(cnt)=rnd(100): loop
// aの内容を表示
pos 16,16: repeat 16: mes a(cnt): loop
// 保存
bsave "temp.dat",a
// 上のファイルからロート
dim b,16
bload "temp.dat",b
// bの内容を表示
pos 64,16: repeat 16: mes b(cnt): loop
配列変数の中身をそのままバイナリで書き出したものを読み込めば
そのまま数値型で処理できます。
あとは必要なデータを抽出するだけでいけると思うのですが。
|
|
2023/2/8(Wed) 22:18:42|NO.99091
>沢渡さん
ありがとうございます。
知りたいのは、
”外部データから直接そのまま数値型として取り出す方法”です。
無ければ”無い”という回答で十分なのですが、
どんな感じでしょうか。
s="1,34,105,5,52,80,9,0,................."
仮にカンマ区切りで5000個の数値があれば
repeat-loopで5000回のint変換が
必要になるのでしょうか・・・。
|
|
2023/2/8(Wed) 22:21:43|NO.99092
×ロート
〇ロード
|
|
2023/2/8(Wed) 22:29:40|NO.99093
>窓月らら さん
ありがとうございます。
目的の事に応用する方法が分からないのですが、
外部ファイル A.dataの中身が、
0,20,10の場合、
そのまま数値型で呼び出す方法はありますか?
(数値配列データ)
notesel COL
noteload "A.dat"
split COL,",",c1,c2,c3
c1=int(c1)
c2=int(c2)
c3=int(c3)
color c1,c2,c3
とintを指定する必要があります。
【呼び出す時点で数値型として呼び出したい】、
という感じです。
※実際は数値が数1000個あるので、
本当なら丸ごと呼び出すsplitではなく、
行数指定(範囲指定”も”出来る)notegetが良いのですが、
文字列しか扱えないと思います。
|
|
2023/2/8(Wed) 22:44:41|NO.99094
まず、ファイルの中身が 0,20,10 というテキストの場合はそれはテキストでしかありません。
読み出しの時点ではテキストデータですから、それを数値に置き換える必要がでます。
配列ならこれだけですが。数1000件程度であれば速度も問題ないでしょう。
data="0,20,10" // 読み込んだテキストとみなす
dim n,3
// 文字列から数値に置き換える
i=0
repeat 3
p=instr(data,i,",")
n(cnt)=int(strmid(data,i,255))
i+=1+p
wait 0 // 沢山ループする場合は必要
loop
// 表示
repeat 3: mes n(cnt): loop
|
|
2023/2/8(Wed) 22:54:04|NO.99095
>窓月らら さん
数値型という事自体が特殊なんですかね;
色々調べるとcsvデータの取り扱いもも文字列型のようで・・・。
>ファイルの中身が 0,20,10 というテキストの場合はそれはテキストでしかありません
(ファイルの中身を数字で書いているので0,20,10 という数値にする方法があるのか気になりますが)、
もしかしてファイル形式(拡張子)にもよるんですかね;
了解しました、ありがとうございます。
|
|
2023/2/8(Wed) 23:03:30|NO.99096
ファイル(メモリ上も同じ)にしたものは文字列も数値もバイナリですが
それぞれ決まったルールでデータが書かれています。
テキストは文字列コードの並びになってます。
数値型は1つの数値が4バイトのデータです(32bit整数の場合、実数型は8バイト)
ファイルに書き出したものをバイナリエディタで表示してみると
何かが見えてくるんじゃないかと思います。
|
|
2023/2/8(Wed) 23:42:40|NO.99097
>窓月らら さん
バイナリ形式で保存すれば、
という感じですかね。
ありがとうございます、
考えてみます。
|
|
2023/2/9(Thu) 20:08:54|NO.99099
よこからすみません。
ふと思い出したので
hspda のサンプルプログラムで
vtest2.hsp で
やりたいことができていると思ったのですが
まとはずれでしたらすみません。
ご参考になればと
|
|
2023/2/10(Fri) 02:51:03|NO.99100
>こち さん
☆ありがとうございます☆
出来ました!
まさにそれです。
数字を数値型としてloadしている感じですね、
そのままダイレクトに数値変数として利用できます。
varファイルの仕組みや中身は全然分かりませんが;
勉強してみます。
もしデータが大量にあって、
範囲指定・一部だけ取り出したい時は、
異なる変数にしておけばいいんですよね、
変数指定のsaveも出来るようですので。
(vsave_put)そちらも色々勉強してみます。
大変ありがとうございました!
|
|