8

文字列があり、ワークスペースに同じ名前の変数が存在するかどうかを確認したいと思います。ワークスペースには、MNO MNN MNMなどの多くの構造もあります。Mという名前の変数が存在するかどうかしか確認できません。この構造をさらに深く理解するにはどうすればよいですか?私は試した:

exist('M.N')
YesNo = any(strcmp(who,'M.N.O'))
evalin('base','exist(''M.N.O'',''var'')')

すべてが私に同じ問題を与えるので、私は立ち往生しています。

4

2 に答える 2

13

isfieldを使用して、変数に特定のフィールドがあるかどうかを確認できます。例については、リンクを参照してください。

あなたの例では、次のものが必要です。

isfield(M,'N')

そして本当なら、あなたはもっと深く行くことができます:

isfield(M.N,'O')

注意してください

isfield(M,'N.O')

動作しません;)

于 2012-08-20T16:23:46.703 に答える
3

1つのオプション:再帰関数を記述して、構造をリーフフィールドまで展開し、フィールドをリストに追加します。

(テストされていない、概念的なコード-おそらくそのままでは完全に機能しないでしょう)

function varlist = getStructFields(var,varlist)
if isstruct(var)
    fn = fieldnames(var);
    varlist = vertcat(varlist,fn); %# append fields to the list
    for field = fn' %# ' create row vector; iterate through fields
         varlist = getStructFields(var.(char(field)), varlist); %# recursion here 
    end
end
end

次に、any(strcmp(who,'M.N.O'))すでに思いついたチェックを使用できます。

于 2012-08-20T17:07:18.560 に答える