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


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
0208
大富豪外部データの読み込み11解決


大富豪

リンク

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)そちらも色々勉強してみます。

大変ありがとうございました!



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