How to check whether a structure exists?
122 次查看(过去 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
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!