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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0424
pluginHSPで指定したファイルの変数を取得したい!!4未解決


plugin

リンク

2017/4/24(Mon) 16:57:30|NO.79276

いつもお世話になっております。

今回は HSPで指定したファイルの変数を取得をするスクリプトを作りたいです。

■構成としては

・指定したファイルのソースを解析する

・変数だけ取得する

・その取得した変数をlistboxに表示する

です。

■例

・test.hsp をロード

testhsp の内容


a = 1 b = 2 c = a + b mes "これはテストです。"

・変数を取得する

・リストボックスの内容

a は 1 代入されています。
b は 2 代入されています。
c は 3 代入されています。

・また、変数の内容も変えるプログラムも欲しいです^^

過去ログを見て調べましたが無かったので
今回、スレッドw上げました。

教えて下さい!!
長文失礼しました。



この記事に返信する


さか

リンク

2017/4/24(Mon) 20:02:47|NO.79278

目的がわからないですが仕様に無理がありますよ。

最終値としても、例えば、無限ループで増加していく場合は
どうなりますか?



さすらいの旅人

リンク

2017/6/25(Sun) 04:50:53|NO.80381

うーん、使用目的がいまいちわかりませんが、test.hspから変数だけ抜き出すことなら標準命令を駆使してできるかもしれませんね。

test.hspで使われる変数を一番最初に列挙し、間を固有の文字で挟みこんで、読み込んだときにその中を切り出し、書式に則って取り出すという方法があります。ただし、この方法では計算式は取り出しにくいと思います。あくまで具体的に数値や文字列が定まったもののみです。また、数値、文字列、実数の判定は考慮していません。

たとえば、上記のtest.hspから取り出したい場合は、


// 変数宣言 a=1 b=2 c=a+b // 変数宣言終わり
などとして、わかりやすい目印をつけます。この際「=」の間にスペースがないほうがいいです。で、本体のソース(ここではmain.hspとする)でinstr関数を使ってその目印が最初に出てくる場所のインデックスを見つけます。(仮にxとする)
そうしたら、別の変数で「//変数宣言終わり」という文字が現れるインデックス番号を検索し代入します。(仮にyとする)

次に、strmid命令を使うため、読み込むべきインデックスの量を出します(y-x)。その文字列サイズだけさらに別の変数に代入します(strmid。仮にzとします。ここで、変数だけが読み込まれます)。
そうしたら、複数行の(変数が2つ以上なら)文字列がzに代入されているので、メモリノートパッド命令を使用します。
こちらはスクリプトのほうがわかりやすいかもしれません。


repeat notemax // 行数分繰り返す noteget hensuu(cnt), cnt // cntはループ毎に1ずつ加算されてゆくのでインデックス番号に使う。hensuuにはその行の変数名と値(a=1みたいな)が格納される。 split hensuu(cnt), "=", name(cnt), value(cnt) // nameには変数名、valueには値が入ります。数値も実数も文字列として扱われますが表示するだけなら問題ないはずです。 loop // 変数が100個とかならawaitはいりませんが数が多いならば入れないと固まります

これで、変数を宣言した順番に配列変数に変数名と値が入りました。
そうしたら、listboxに表示させるのは簡単です。


// ノートパッドの対象はzになっていること前提(さっきのスクリプトからnoteunselを実行していない) repeat notemax // 再結合しなくてはならない noteadd name(cnt)+"には「"+value(cnt)+"」が代入されています。", cnt, 1 // 文言を追加する。上書きモードにする loop // これも上記同様awaitを適宜入れる noteunsel // ここでノートパッドを解除 listbox (適当に変数), (yサイズ), z // これでリストボックスが作成される。

ざっと、こんな感じです。

> 値を変更したい

これに関しては、やる意味がありません。ここで読み込んだものは変数に代入できないので(ただのテキストファイルとみなされてしまう)、この行為自体が無意味となります。
dim name(cnt)とすることができないので、変数を代入することはできません。そこはご理解ください。(強引にやろうと思えばできますがそこに関しては私はかかわりません)

これ以外にも最適な方法があったり、あるいは私のスクリプトが間違っている場合もありますが、おおむねこのような感じでいけるはずです。もし、このスクリプトに誤りがあったりしたら、自力で解決できるもの(たとえば誤字やラベル忘れ、命令など)はヘルプが充実しているのでそちらを参考にするといいかと思います。

お粗末ながら、これをもって私自身の回答とさせていただきます。



スペース

リンク

2017/6/25(Sun) 12:34:57|NO.80384

こんな感じにやれば出来ますよ。
http://hsp.tv/play/pforum.php?mode=pastwch&num=42969



Y_.repeat

リンク

2017/6/25(Sun) 15:44:12|NO.80385

昔、ググったらfujiなんとかさんのブログに変数取得の記事あった気がするんですが
検索下手な自分じゃググっても出てこないっす
ひょっとしたらLINK切れかも

公式BBSでなんとなくHITした記事
http://hsp.tv/play/pforum.php?mode=pastwch&num=50948



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