配列を使用しないで、変数名を参照する

解決


Hiro  2007-07-11 23:35:36  No: 27027

お世話様です。

ある変数を次のように定義して、
var
  A1, A2, A3: Integer;
  B: String;
A1を参照するときに、
  B:='A1';
  B:=100
というようにする方法はありますでしょうか。
配列を使って添字で1、2、3をコントロールすればいいのですが、
こんな手法ができるのかなーという疑問にすぎないのですが。

以上、よろしくお願いいたします。


Basser  2007-07-11 23:58:23  No: 27028

変数BでA1, A2, A3 の値を参照したいのであれば、
ポインタを利用します。

  var
    A1, A2, A3: Integer;
    B: PInteger;
  begin
    A1:= 0;
    B := @A1;
    B^:= 100;
    Showmessage(Format('A1:%d B:%d', [A1, B^]));
  end;


Hiro  2007-07-12 00:33:57  No: 27029

すばやいご回答、ありがとうございます。
うれしーです。

なるほど、ポインター型の利用ですね。
テーブルの項目であれば、
  for i:=1 to x do
    Table1.FieldByName('A'+IntToStr(i)).AsInteger
というように、文字列を連結して参照できますが、
変数を、
  A+'1' := 100
などのような形で参照するのは、やっぱり無理ですよね。


うひ  2007-07-12 01:21:03  No: 27030

function GetA(s: string): string;
const
  Ints: array[0..2] of TIdentMapEntry = (
    (Value: 100; Name: 'A1'),
    (Value:  22; Name: 'A2'),
    (Value: 333; Name: 'A3'));
var
  ii: Integer;
begin
  if IdentToInt(s, ii, ints) then
    Result:= IntToStr(ii) else
    Result:= '';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Caption:= GetA( Edit1.Text );
end;

こんなのではどうかな?


Basser  2007-07-12 01:55:34  No: 27031

>変数を、
>  A+'1' := 100
>などのような形で参照するのは、やっぱり無理ですよね。

無理ですが、TStringList を使えば似たようなことは出来ます。


Hiro  2007-07-12 19:39:14  No: 27032

うひさん、ソースありがとうございます。参考にさせていただきます。
Basserさん、TStringListを使用して、TStrings.Values['A1']とする方法ですね。

皆さんありがとうございます。
これにて解決とさせていただきます。
またよろしくお願いいたします。


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

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






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