1

「int」という変数があり、そこに大量のデータが含まれています。ユーザー入力でこの変数の名前をプログラムで変更する方法を見つけたいと思います。したがって、データに関するユーザー識別情報を照会できます。応答が「AA1」であるとします。変数「int」の名前を「AA1」に変更するか、「AA1」を int と同じ変数にします。

入力コマンドを使用すると、実際に変数名を作成する代わりに、ユーザーが既に作成された変数に値を割り当てることができるため、問題が発生します。eval 関数またはそのバリエーションを使用すると、これを達成するのに役立ちますか? それとももっと簡単な方法がありますか?

ありがとう!

4

1 に答える 1

2

念のために言ってintおきますが、変数名の選択はかなり不適切です。

それはさておき、次のようにやりたいことができます

sayfooは、ユーザーが入力した文字列を保持する変数です。次のことができます。

% eliminate leading/trailing whitespace
foo = strtrim(foo);
a = regexp('[a-zA-Z][a-zA-Z0-9_]*',foo));
if numel(a) == 0 
    fprintf('Sorry, %s is not a valid variable name in matlab\n', foo);
elseif a ~= 1
    fprintf('Sorry, %s is not a valid variable name in matlab\n', foo);
elseif 2 == exist(foo,'var')
    fprintf('Sorry, %s already in use as a variable name.');
else
    eval([foo,' = int']);
end

int(そして現在foo) が という名前のフィールドを持つ構造体であると仮定するとbar、次のように bar を読み取ることができます。

barVal = eval([foo,'.bar']);

これはすべてやや不格好です。

はるかに扱いにくい別のアプローチは、連想配列を使用し、ユーザーが int のさまざまな値を配列に格納できるようにすることです。連想配列に対する Matlab のアプローチはMapsです。それが、この問題に対する私の好ましいアプローチです。上記と同じ変数を使用した例を次に示します。

nameValueMap = containers.Map;
nameValueMap(foo) = int;

上記は、 に保存されている名前fooと変数のデータとの関連付けを作成しますint

データを取得するには、次のことを行うだけです。

intValue = nameValueMap(foo);
于 2013-07-18T15:10:47.510 に答える