お世話様です。
ある変数を次のように定義して、
var
A1, A2, A3: Integer;
B: String;
A1を参照するときに、
B:='A1';
B:=100
というようにする方法はありますでしょうか。
配列を使って添字で1、2、3をコントロールすればいいのですが、
こんな手法ができるのかなーという疑問にすぎないのですが。
以上、よろしくお願いいたします。
変数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;
すばやいご回答、ありがとうございます。
うれしーです。
なるほど、ポインター型の利用ですね。
テーブルの項目であれば、
for i:=1 to x do
Table1.FieldByName('A'+IntToStr(i)).AsInteger
というように、文字列を連結して参照できますが、
変数を、
A+'1' := 100
などのような形で参照するのは、やっぱり無理ですよね。
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;
こんなのではどうかな?
>変数を、
> A+'1' := 100
>などのような形で参照するのは、やっぱり無理ですよね。
無理ですが、TStringList を使えば似たようなことは出来ます。
うひさん、ソースありがとうございます。参考にさせていただきます。
Basserさん、TStringListを使用して、TStrings.Values['A1']とする方法ですね。
皆さんありがとうございます。
これにて解決とさせていただきます。
またよろしくお願いいたします。
ツイート | ![]() |