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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1015
ssdd文字列→変数名 に変換したい6解決


ssdd

リンク

2008/10/15(Wed) 17:01:12|NO.20187

文字列を変数名に変換したいです。

a="abc"なら、変数abcを作成し、
a="bbbb"なら、変数bbbbを作成したいのですが。

どのようにすれば良いですか?



この記事に返信する


xxx

リンク

2008/10/15(Wed) 21:06:57|NO.20203

既出です。
過去ログから、「文字列を計算式とする」。

次回からは質問する前に検索しましょう。



ssdd

リンク

2008/10/15(Wed) 21:36:12|NO.20205

>>過去ログから、「文字列を計算式とする」。
すいませんでした。
「文字列を計算式とする」で検索するのは予想外でした。
計算式を求める訳では なかったので。


ただ紹介された過去ログを見て、どう応用するか見当もつきません。
結果的に
 「a = "abc"」なら「sdim abc,100」
 「a = "qwer"」なら「sdim qwer,100」
 「a = "xyz"」なら「sdim xyz,100」
となれば良いのですが、、。



SYAM

リンク

2008/10/15(Wed) 22:15:38|NO.20206

「文字列を計算式とする」でやっていることは、変数を作るものではないです。
そのスレッドの内容では、質問されていることの回答にはなりません。
…というか、「ムリです」っていう回答になります。


そもそも動作中に変数名を云々すること自体が不思議…というか、
スクリプトが動作してる時点では、変数名という概念そのものがないはずです。

お望みのことができたとして、それで何をしようと考えていますか?



エレキ掃除機

リンク

2008/10/16(Thu) 16:50:23|NO.20238

要するにあれです。
世界が違います。
たとえば、#packopt hideというのに、"abc"なら#packopt abc とするわけにはいきません。



ssdd

リンク

2008/10/16(Thu) 21:03:56|NO.20259

とりあえず無理だって事が分かったので「解決」にします。
ありがとうございました。

エレキ掃除機さんの例えが分かりませんでしたが。



.Hrk

リンク

2008/10/16(Thu) 21:33:21|NO.20260

既に解決になっているのですが、インタプリタ的なことがしたいのであれば
以下のようにすることで文字列と内部変数を対応付けできます。


;変数管理モジュール ; ; [ 使い方 ] ; ; 変数を作成 ; makevar _name, _val ; ; _name 変数名。いまのところ、全部の文字が使えます。 ; _val(0) 初期値。いまのところ、int型の値しか代入できません。 ; ; 戻り値 0 成功 ; -1 引数が無効(変数名が空文字列である) ; -2 変数テーブルに空きがない ; ; 変数を削除 ; delvar _name ; ; _name 変数名。 ; ; 戻り値 なし ; ; 変数が定義されているかチェック ; isdef _name ; ; _name 変数名。 ; ; 戻り値 1 定義されている ; 0 定義されていない ; ; 変数に値をセット ; setvar _name, _val ; ; _name 変数名。 ; _val セットする値。int型の値しか代入できません。 ; ; 戻り値 0 成功 ; -1 変数が未定義 ; ; 変数の値を取得 ; getvar _name, _val ; ; _name 変数名。 ; _val 変数の値を受け取るint型変数。 ; ; 戻り値 0 成功 ; -1 変数が未定義 ; ; 変数の値を取得 (関数版) ; getvarf _name ; ; _name 変数名。 ; ; 戻り値 変数の値 ; 注) 変数が定義されていない場合、0が返ります。 ; #module varman ;変数テーブルのサイズ #const TABLE_SIZE 1024 ;_init_varman #deffunc _init_varman sdim varname_, 256, TABLE_SIZE dim varval_ , TABLE_SIZE cnt_ = 0 return ;makevar #deffunc makevar str _name, int _val if( _name == "" ) : return -1 ;無名変数は作成できない id=-1 repeat TABLE_SIZE if( varname_(cnt) == "" ){ id = cnt ;変数の登録 varname_(id) = _name varval_(id) = _val cnt_++ break } loop if( id == -1 ) : return -2 ;テーブルに空きが無い return 0 ;delvar #deffunc delvar str _name repeat cnt_ if( varname_(cnt) == _name ){ varname_(id) = "" cnt_-- break } loop return ;isdef #defcfunc isdef str _name ret=0 repeat cnt_ if( varname_(cnt) == _name ) { ret = 1 break } loop return ret ;setvar #deffunc setvar str _name, int _val id=-1 repeat cnt_ if( varname_(cnt) == _name ){ id = cnt varval_(id) = _val break } loop if( id == -1 ) : return -1 ;変数が見つからなかった return 0 ;getvar #deffunc getvar str _name, var _val id=-1 repeat cnt_ if( varname_(cnt) == _name ){ id = cnt _val = varval_(id) break } loop if( id == -1 ) : return -1 ;変数が見つからなかった return 0 ;getvarf #defcfunc getvarf str _name ret=0 repeat cnt_ if( varname_(cnt) == _name ){ ret = varval_(cnt) break } loop return ret #global _init_varman ;モジュールを初期化 ;使用例 ) makevar "hoge", 100 ;変数"hoge"を定義 makevar "piyo", 200 ;変数"piyo"を定義 mes "hoge + piyo = "+(getvarf("hoge") + getvarf("piyo")) ;hoge + fuga の値を表示 mes "fuga = "+getvarf("fuga") ;未定義の変数にアクセスすると"0"が返る ;makevar "fuga" ;コメントアウトを解除すると、下のメッセージ ;が「〜定義されています」になる text = "変数\"fuga\"は定義されていま" if( isdef("fuga") ){ ;変数"fuga"が定義されているかチェック text += "す" }else{ text += "せん" } mes text



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