How to check whether a structure exists?
    54 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Ben Wang
 le 7 Mai 2011
  
    
    
    
    
    Commenté : Walter Roberson
      
      
 le 17 Oct 2017
            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 commentaires
Réponse acceptée
  Walter Roberson
      
      
 le 7 Mai 2011
        exist('structurename','var')
[EDITED, Jan Simon 25-Feb-2012 22:00 UTC]: exists -> exist
6 commentaires
  John McGraw
 le 17 Oct 2017
				This does not work for me:
exist(nonExistantFileStruct, 'var')
??? Undefined function or method 'exist' for input arguments of type 'struct'.
Plus de réponses (3)
  Céldor
      
 le 31 Mar 2012
        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 commentaires
  Jan
      
      
 le 31 Mar 2012
				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
      
      
 le 31 Mar 2012
				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
      
      
 le 7 Mai 2011
        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
2 commentaires
  Jason Garcia
 le 25 Fév 2012
        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 commentaires
Voir également
Catégories
				En savoir plus sur Structures dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!








