How to check whether a structure exists?
    54 ビュー (過去 30 日間)
  
       古いコメントを表示
    
Dear all:
I have a simple question and I can't find an answer on the web...
I have a function that takes arguments in. One argument is a structure array, and inside the function I want to test whether this argument is specified and feed into the function.
I tried isexist(), but this is not for a structure. isstruct() can test whether it is a structure, but the name must exist first. isfield() can check if a structural field exist, but not the structure itself.
So my question is, how to test whether a structure exist?
Any help is appreciated.
Cheers
Ben
0 件のコメント
採用された回答
  Walter Roberson
      
      
 2011 年 5 月 7 日
        exist('structurename','var')
[EDITED, Jan Simon 25-Feb-2012 22:00 UTC]: exists -> exist
6 件のコメント
  John McGraw
 2017 年 10 月 17 日
				This does not work for me:
exist(nonExistantFileStruct, 'var')
??? Undefined function or method 'exist' for input arguments of type 'struct'.
その他の回答 (3 件)
  Céldor
      
 2012 年 3 月 31 日
        This thread is old but if someone still needs an answer then
exist('var_name') works and returns 0 if a structure does not exist in memory
Regards
2 件のコメント
  Jan
      
      
 2012 年 3 月 31 日
				This is no sufficient solution in opposite to the advice Walter gave 329 days ago: "exist('var_name')" replies a non-zero if there is a corresponding .m, .p, .mex file or folder in the path, or if there is a Java class with this name. Because all these chances are checked, "exist()" is slow when used without 2nd argument. See "help exist".
  Walter Roberson
      
      
 2012 年 3 月 31 日
				But it can return non-zero if there happens to be something else by the same name, such as a function or directory. It is better to use the optional second argument to be specific that you are inquiring about a variable.
  Matt Fig
      
      
 2011 年 5 月 7 日
        I am not entirely sure what you want to do, but here is an example input parsing... You don't have to make your function error as I do, but the checks are there.
function [] = takestwoargs(A,B)
% Takes two arguments, the first is a structure, the second
% is a double.  Both are required.
if nargin~=2
    error('Two input arguments required.')
elseif ~isstruct(A)
    error('The first input must be a structure.')
elseif ~isa(B,'double')
    error('The second argument must be a double.')
end
%
%
%
%
EDIT In response to your comment below. To make defaults, you could do something like this:
function [] = takestwoargs(A,B)
% Takes two arguments, the first is a structure, the second
% is a double.  Both are required.
N = nargin;  % Check how many inputs were passed.
if N==0
    A = struct('string','hello','yes','lengths',4);
    B = 5;% Defaults.
elseif N==1
    B = 5;% Default.
else
   % Or make defaults and issue a warning that 
   % argumenst beyond the second are ignored....
   error('Two many input arguments.')
end
if ~isstruct(A)
    % Or make a default and issue a warning...
    error('The first input must be a structure')
elseif ~isa(B,'double')
    % Same as above...
    error('The second argument must be a double')
end
  Jason Garcia
 2012 年 2 月 25 日
        Or alternatively, you could try:
x =
    x: 1
    y: 2
    z: 3
>> any(strcmp(fieldnames(x),'d'))
ans =
     0
>> any(strcmp(fieldnames(x),'y'))
ans =
     1
2 件のコメント
参考
カテゴリ
				Help Center および File Exchange で Structures についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!








