Borrar filtros
Borrar filtros

find a string element in a structure matrix

214 visualizaciones (últimos 30 días)
eliza
eliza el 13 de Mzo. de 2012
Comentada: dan el 10 de Mzo. de 2021
assume i have a matrix t =
'abc'
'defg'
'hi'
i want to check if 'abc' is in the matrix t
however this code doesnt seem to work
if (find(t == 'abc') >0)
i get the following error message Undefined function or method 'eq' for input arguments of type 'cell'.
  1 comentario
Jan
Jan el 13 de Mzo. de 2012
FIND replies a vector of indices. Therefore "find()>0" is not working.

Iniciar sesión para comentar.

Respuesta aceptada

Jan
Jan el 13 de Mzo. de 2012
The shown data cannot be a matrix, because a matrix must have a rectangular shape. I assume you mean a cell string:
C = {'abc', 'defg', 'hi'};
Then:
if any(strcmp(C, 'abc'))
disp('abc found');
end

Más respuestas (2)

sworland
sworland el 3 de Dic. de 2015
I realize that the answer for this was accepted, but the question did say in a "structure matrix", which I interpreted to mean a structure array. For that the following will find the index of the first occurrence,
index = find(strcmp({structname.field}, 'string')==1)
  6 comentarios
gao yang
gao yang el 15 de Oct. de 2020
Merci!!!!
dan
dan el 10 de Mzo. de 2021
Perfect! Thanks.

Iniciar sesión para comentar.


Geoff
Geoff el 13 de Mzo. de 2012
Direct comparison operators (==, etc) don't work with strings.
You need to use strcmp or strcmpi (which ignores case).
Because that function doesn't work on an array, you need to map it:
isabc = cellfun( @(x) strcmp(x,'abc'), t );
This will give you an array of booleans. If you don't care what index the 'abc' occurred at, but just that it exists, you then do this:
if any(isabc)
% etc
end
To obtain the index of the first occurrence, use this:
firstabc = find( isabc, 1 );
-g-
  2 comentarios
Jan
Jan el 13 de Mzo. de 2012
The == operator does work with strings, try:
a = 'abc', b = '12c', a==b, a=='b';
The only limitation is that both arguments must have the same size or one must be a scalar.
STRCMPI does accept cell strings as inputs such that the CELLFUN approach is not needed.
eliza
eliza el 15 de Mzo. de 2012
thank you!

Iniciar sesión para comentar.

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!

Translated by