s1 s2 s3 ・・・・ s1000 と1000個の変数があるとします。
's' + '3' (文字列)を利用して、変数s3の値を取得するにはどうしたらいいのでしょうか?
これじゃダメ?
var
i:integer;
s:array[1..1000] of string;
begin
for i:=1 to 1000 do
begin
s[i]:=inttostr(i) ;
end;
〜略〜
if i=3 then
Edit1.Text:=s[i];
ご回答ありがとうございます。
配列を使わず、例えば
i:= 3;
Edit1.Text:= 変数名を値に変換する何か('s' + inttostr(i));
みたいなことはできないでしょうか?
変数の名前というのはソースを書く時点で、
人間が理解するためのもので、コンパイルされた時点で消失します。
よって、変数の名前を参照することはできません。
通行人さんが示すような代替法が一般的かと思います。
>s1 s2 s3 ・・・・ s1000 と1000個の変数があるとします。
delphiでは変数を最初に宣言しないといけないので、
そちらの方が大変だと思いますが、よろよろさんは
具体的にはどんな使用をされたいのでしょうか。
他のアプリケーション言語を使っていまして、それでは
s:= &s3
で、変数s3の値を、sに取れていました。(文字・数値・・等ほとんど)
つまり、以前のプログラムを以前程度の労力でDelphiに書き換えたわけでして・・・
一部まちがえていました
s:= &'s3'
>他のアプリケーション言語を使っていまして、それでは
具体的には何言語でしょうか
delphiは型に厳格な言語ですので数値でも整数と実数では
扱いが違います
関数の作成でoverloadで同一の関数名で違う型を処理
する事はできるでしょうが、後の事を考えると
地道に書き換えた方が早道の様に思います
dBASEです
dBASEは使ったことはないのですが、
http://ja.wikipedia.org/wiki/DBASE
を見る限りでは、「文字列評価」というものみたいですね。
# JavaScriptのevalなんかと同等
Delphiには、文字列を式として評価する機能はないので、PPAやDMSなどを利用するほかないです。
単純に変数のみ文字列として組み立てたいのであれば、ハッシュマップ系のクラスを作るか、TStringListクラスやTHashedStringListクラスを利用するのがよいかと思います。
その場合、式の評価はできません。
# dBASEでは、たぶん s := &'s1+s2+s3' というような式も評価できるはず
また、値は文字列のみになります。
たとえば、
var
sl: TStringList;
i : integer;
begin
sl := TStringList.Create;
sl.Values['s1'] := 'aaa';
sl.Values['s2'] := 'bbb';
sl.Values['s3'] := 'ccc';
i := 2;
WriteLn(sl.Values['s' + IntToStr(i)]);
・・・
というようにかけます。
にしの様貴重なご意見ありがとうございます。
TStringListでほぼできそうです。
こんな使い方がるとは知りませんでした。
感謝!!!
ツイート | ![]() |