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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1215
シンバル定数名を文字列として取得する13解決


シンバル

リンク

2008/12/15(Mon) 23:34:30|NO.21618

定数名を文字列として、取得することは可能なのでしょうか?

たとえば
#const global 赤 0xff0000
から、「赤」という文字列を、取り出したいと思っています。

変数は可能みたいなのですが、定数でも同じことができるでしょうか。



この記事に返信する


レノス

リンク

2008/12/16(Tue) 20:24:32|NO.21638

不可能です。
定数は、スクリプトを実行する前に、実際の数値に置き換わっています。
例では「赤」と書いてあるところはすべて「0xff0000」になっています。
そのため、スクリプトを実行している時点で定数名を知る手段はありません。
( #cmpopt ppout 1 を先頭に付けてみるとよく分かる )

と、一応言いましたが、こんな感じでしょうか?↓

*GetColorName switch ( colorref ) case 赤 : return "赤" case 青 : return "青" case 緑 : return "緑" swend return "" // 定数値なし



シンバル

リンク

2008/12/16(Tue) 20:55:46|NO.21639

どうも返答、ありがとうございました。
その方法で行くか、変数を定数代わりに使うか、検討してみます。



lim7000

リンク

2008/12/16(Tue) 21:42:04|NO.21640

ちょい待ち、変数名を文字列で取得する方法なんてあるか…?



check

リンク

2008/12/16(Tue) 21:58:46|NO.21641

そうそう、コンパイルしたときに変数の名前は破棄されるから、
習得なんてできないのでは。



シンバル

リンク

2008/12/16(Tue) 22:48:42|NO.21642

それがですね
HSPのHELPから見れるhspda.asをインクルードする命令、getvarnameや
http://d.hatena.ne.jp/chaperatta/20080214/1202961909
で、変数名を取得できているようなのです。

もしかしたら、定数名もその方法を応用して取得できると思ったのですが…
どうなのでしょうか。



ANTARES

リンク

2008/12/16(Tue) 23:25:50|NO.21645

 ま、デバッグウィンドウに変数名が表示されるくらいだから
コンパイル+実行時には変数名の取得は可能でしょう。
デバッグ情報つきコンパイル(HSP3にもあったっけ? ていうか
標準エディタでできたっけ?)を使えばexeファイルにしても可能かも。



シンバル

リンク

2008/12/16(Tue) 23:51:56|NO.21646

前回書き込んだサイトでもコメント欄で、exeファイル後も可能と言ってました。

変数名が取得可能なのはデバッグウィンドウの副産物だとしたら、
定数はデバッグウィンドウに表示がありませんから、
定数名は保存してある必要性がなくて、情報が破棄されていそうですね。

参考になる情報ありがとうございました。



FUJI

リンク

2008/12/17(Wed) 08:35:05|NO.21650

HSP の内部構造にアクセスして変数名を取得するなんていう黒魔術は最終手段にしましょう。
よほど変なことをしたいのでなければ、そんなことが必要になることはないと思います。
何がしたいのかは知りませんが、別の実現方法を考えてみてください。



シンバル

リンク

2008/12/17(Wed) 15:41:23|NO.21661

返答ありがとうございます、よほど変な事をしたいと思ってます。
あまのじゃくですみません…。

質問したいのですが、黒魔術や最終手段と言い切る その理由はどんなものでしょう?

ナイーブな部分なので、あまりいじるとメモリやらが狂って危ないのでしょうか?
はたまた、重い処理だったり、OSによって機能しない可能性があったりするのでしょうか?
スクリプトが複雑になるとか、共同開発者が気分を害されるといったものでしょうか?

パソコンが壊れたり動かなかったりする事を危惧するようなものなら、
変数名を文字列取得する方法も、諦めようと思います。



FUJI

リンク

2008/12/18(Thu) 18:19:07|NO.21703

>質問したいのですが、黒魔術や最終手段と言い切る その理由はどんなものでしょう?
もし変数名を取得しなくても実現できることだったら、それをするのはオーバースペックと思ったからです。
トリッキーなことをしなくてすむのならそうした方がいいと思います。

>ナイーブな部分なので、あまりいじるとメモリやらが狂って危ないのでしょうか?
>はたまた、重い処理だったり、OSによって機能しない可能性があったりするのでしょうか?
>スクリプトが複雑になるとか、共同開発者が気分を害されるといったものでしょうか?
内部構造にアクセスするようなプログラムはサポートされにくいと思います。
たとえば、 HSP がバージョンアップして内部の構造が変わるなどして、今後のバージョンで動かなくなることもありえます。

ところで、定数名を取得してどのような「よほど変なこと」をしたいのか知りたいです。
もし用意した定数の中から値が同じものの定数名を取得したいという目的ならば、定数名と同じ文字列のテーブルを作ればいいのではないでしょうか。



シンバル

リンク

2008/12/18(Thu) 20:10:56|NO.21707

HSPがバージョンアップして動かなくなる事を危惧されていたのですね。
なっとくしました。たしかにそれはありえますね。
よく検討してみたいと思います。

自分がしてるよっぽど変なことは、
自分の作ってるスクリプトは無数の物(食べ物など)が存在して、
それを自分が理解しやすい日本語名に置き換えて、
種類ごとに階層化し、0x000001〜0x800000の加算を添え字にした定数で、管理をしてます。

それがあまりに量が多く、無数の定数名がある状態になっていまして、
テーブルにするのも改造に時間がかかるし、文字列のテーブルにしてしまうと、
膨大に余分なメモリも確保するし、二つも同じ文字がある状態では管理も不便と思いました。

定数名を文字列にできればメモリも節約できるし、
余分な文字を書かなくて済むので、管理もしやすいと思っていたのです。
なんか、よく分からない説明ですみません。



コンテスト出品者

リンク

2008/12/18(Thu) 22:05:50|NO.21716

別ファイル、たとえばCSVにしてエクセルで管理、とかする方が
将来の汎用性も考えれば管理が楽なのではないでしょうか。
なんとなくですが。



シンバル

リンク

2008/12/19(Fri) 00:39:36|NO.21719

助言ありがとうございます。
そうですね、それも一つの選択肢です。
情報をエクセル化できれば、管理をしやすくなりそうですね。
そっち方面で一度、がんばってみます。



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