Why, oh why does isempty return 0? Questions related to dataset access and return from strfind.
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Marshall
el 29 de Sept. de 2014
Comentada: Stephen23
el 30 de Sept. de 2014
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 comentarios
Respuesta aceptada
Matt J
el 29 de Sept. de 2014
Editada: Matt J
el 29 de Sept. de 2014
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 comentarios
Más respuestas (2)
Stephen23
el 29 de Sept. de 2014
Editada: Stephen23
el 29 de Sept. de 2014
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 comentarios
Stephen23
el 30 de Sept. de 2014
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
el 29 de Sept. de 2014
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)
...
2 comentarios
Ver también
Categorías
Más información sobre Characters and Strings en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!