複数の変数から一つの変数を選び処理するには


よろよろ  2007-07-04 08:08:55  No: 26906

s1 s2 s3 ・・・・ s1000 と1000個の変数があるとします。
's' + '3' (文字列)を利用して、変数s3の値を取得するにはどうしたらいいのでしょうか?


通行人  2007-07-04 09:39:52  No: 26907

これじゃダメ?

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];


よろよろ  2007-07-04 22:59:55  No: 26908

ご回答ありがとうございます。
配列を使わず、例えば

i:= 3;
Edit1.Text:= 変数名を値に変換する何か('s' + inttostr(i));

みたいなことはできないでしょうか?


あんこ  2007-07-04 23:17:34  No: 26909

変数の名前というのはソースを書く時点で、
人間が理解するためのもので、コンパイルされた時点で消失します。
よって、変数の名前を参照することはできません。
通行人さんが示すような代替法が一般的かと思います。


TS  2007-07-05 05:47:09  No: 26910

>s1 s2 s3 ・・・・ s1000 と1000個の変数があるとします。
delphiでは変数を最初に宣言しないといけないので、
そちらの方が大変だと思いますが、よろよろさんは
具体的にはどんな使用をされたいのでしょうか。


よろよろ  2007-07-05 07:17:06  No: 26911

他のアプリケーション言語を使っていまして、それでは

s:= &s3

で、変数s3の値を、sに取れていました。(文字・数値・・等ほとんど)
つまり、以前のプログラムを以前程度の労力でDelphiに書き換えたわけでして・・・


よろよろ  2007-07-05 07:19:31  No: 26912

一部まちがえていました

s:= &'s3'


TS  2007-07-05 07:58:52  No: 26913

>他のアプリケーション言語を使っていまして、それでは
具体的には何言語でしょうか
delphiは型に厳格な言語ですので数値でも整数と実数では
扱いが違います
関数の作成でoverloadで同一の関数名で違う型を処理
する事はできるでしょうが、後の事を考えると
地道に書き換えた方が早道の様に思います


よろよろ  2007-07-05 08:09:57  No: 26914

dBASEです


にしの  2007-07-05 09:03:53  No: 26915

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)]);
・・・
というようにかけます。


よろよろ  2007-07-05 19:15:49  No: 26916

にしの様貴重なご意見ありがとうございます。
TStringListでほぼできそうです。
こんな使い方がるとは知りませんでした。

感謝!!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加