フィルターのクリア

find a string element in a structure matrix

214 ビュー (過去 30 日間)
eliza
eliza 2012 年 3 月 13 日
コメント済み: dan 2021 年 3 月 10 日
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 件のコメント
Jan
Jan 2012 年 3 月 13 日
FIND replies a vector of indices. Therefore "find()>0" is not working.

サインインしてコメントする。

採用された回答

Jan
Jan 2012 年 3 月 13 日
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
  1 件のコメント
eliza
eliza 2012 年 3 月 15 日
thank you!

サインインしてコメントする。

その他の回答 (2 件)

sworland
sworland 2015 年 12 月 3 日
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 件のコメント
gao yang
gao yang 2020 年 10 月 15 日
Merci!!!!
dan
dan 2021 年 3 月 10 日
Perfect! Thanks.

サインインしてコメントする。


Geoff
Geoff 2012 年 3 月 13 日
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 件のコメント
Jan
Jan 2012 年 3 月 13 日
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 2012 年 3 月 15 日
thank you!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by