Check if any field in a given structure is empty

조회 수: 140 (최근 30일)
ihrram
ihrram 2017년 3월 6일
댓글: Dominique 2022년 2월 16일
Hello everyone,
I have a structure with quite some fields and I want to check, if any of the fields are empty. Is there a way to do this without checking for each field individually?
Currently I have an if statement with many ORs to do this:
if isempty(structure.field1) || isempty(structure.field2)
and so on
I tried to do the same with
any(isempty(fieldnames(structure))
but obviously the fieldnames are not empty.

채택된 답변

Walter Roberson
Walter Roberson 2017년 3월 6일
any( structfun(@isempty, YourStructure) )
  댓글 수: 5
Gabor
Gabor 2019년 3월 5일
It dis not for me on a table:
a.table{1}=table();
a.table{2}=table();
>> any( structfun(@isempty, a.table{20}) )
Index exceeds matrix dimensions.
>> any( structfun(@isempty, a.table{2}) )
Error using structfun
Inputs to STRUCTFUN must be scalar structures.
How can I check if a.table{20} exists or not or empty? Anything that whould give me information of it exsistance? I could not find any function that could have helped so far.
Thank you
Walter Roberson
Walter Roberson 2019년 3월 9일
if length(a.table) >= 20 & ~isempty(a.table{20})

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Ross Nye
Ross Nye 2017년 11월 30일
I'm going to leave this here in case someone comes across this page looking for a similar answer to what I was.
I have a 1xN struct with many fields. One particular field was supposed to be boolean, but only the falses had been entered and the rest were []. The above answers didn't seem to help me, but I did find something on Reddit which did.
emptyIndex = find(arrayfun(@(MyStruct) isempty(MyStruct.myField),MyStruct));
I can then use emptyIndex to set the fields to true as needed.
HTH someone.
  댓글 수: 3
Selene Fregosi
Selene Fregosi 2019년 8월 13일
This helped me too - thank you!
Andres
Andres 2021년 5월 27일
This will work as well
find(cellfun(@isempty,{MyStruct.myField}))
for a struct array MyStruct with field myField.
Note in many cases you don't need find for indexing.
Example: fill empty fields with 0s
MyStruct(3).myField = 123;
hasNone = cellfun(@isempty,{MyStruct.myField});
[MyStruct(hasNone).myField] = deal(0);

댓글을 달려면 로그인하십시오.


LeChat
LeChat 2020년 8월 13일
It might be a bit dirty because I use a loop but it works:
ind=[];
for ii=1:numel(MyStruct)
if isempty(MyStruct(ii).FieldName)
ind=[ind, ii];
end
end
Then ind contains all the indexes where the structure field is empty.
For instance if you then want to remove them from the structure:
MyStruct_init=MyStruct;
MyStruct(ind)=[];
Hope this helps!

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by