Why, oh why does isempty return 0? Questions related to dataset access and return from strfind.
5 次查看(过去 30 天)
显示 更早的评论
Hello all,
I have a dataset array for example called measurement which contains a subfield called tempSequence containing single digits stored as strings (eg. '1', '2', etc.) I want to perform a check for the contents of this field and am using a combination of isempty and strfind and can't seem to get a TRUE return.
Specifically, I want to check that the field contains both a '1' and a '5' like so:
if( ~isempty(strfind(measurement.TempSequence, '1')) && isempty(strfind(messung.TempSequence, '5')) )
% Both 1 and 5 are present, perform operation on different subfield.
end
If tempSequence is as follows:
K>> measurement.TempSequence
ans =
'3'
'4'
'5'
'2'
And strfind returns:
K>> strfind(measurement.TempSequence, '1')
ans =
[]
[]
[]
[]
Why why why:
K>> isempty(strfind(measurement.TempSequence, '1'))
ans =
0
Is it something to do with it being a dataset and therefore has attached metadata? Am I using strfind in a dumb way? What am I missing?
Why:
K>> isempty(strfind(measurement.TempSequence, 'foobar'))
ans =
0
Thank you for reading! Marshall
0 个评论
采纳的回答
Matt J
2014-9-29
编辑:Matt J
2014-9-29
The output of strfind is a cell array. To be considered empty, a cell array must have no cells whatsoever,
>> isempty({})
ans =
1
This is different from a cell array containing cells with empty matrices
>> c={[]};
>> isempty(c)
ans =
0
>> isempty(c{1})
ans =
1
2 个评论
更多回答(2 个)
Stephen23
2014-9-29
编辑:Stephen23
2014-9-29
Expanding on Matt J's answer, if you wish to check if every cell of a cell array contains an empty array, then you can use cellfun :
cellfun('isempty',cell_array)
2 个评论
Stephen23
2014-9-30
It is a good thing that you keep this in mind. Basically in MATLAB think of the arrays/matrices more as the mathematical concept, and not as a programming abstraction of some lower-level data (like in C).
David Young
2014-9-29
The two earlier answers are both correct. Another suggestion which might help is to use ismember() instead of ~isempty(strfind()), with the opposite argument ordering:
if ismember('1', measurement.TempSequence) && ismember('5', measurement.TempSequence)
...
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Characters and Strings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!