Undefined function 'eq' for input arguments of type 'cell error

72 views (last 30 days)
txt1=[{'a'},{'b'},{'c'}];
txt1=txt1(:);
data=[{'a'},{'b'}];
data=data(:);
[row,col] = find(txt1==data)
%it gives
Undefined function 'eq' for input arguments of type 'cell'. error.

Accepted Answer

per isakson
per isakson on 13 May 2014
Edited: per isakson on 13 May 2014
Replace
txt1==data
by
ismember( txt1, data )
and see documentation of ismember

More Answers (2)

David Sanchez
David Sanchez on 13 May 2014
You can also do:
txt1=[{'a'},{'b'},{'c'}];
txt1=txt1(:);
data=[{'a'},{'b'}];
data=data(:);
idx = getnameidx(txt1,data)
idx =
1 2

iris jogin
iris jogin on 10 Jun 2016
Edited: Walter Roberson on 10 Jun 2016
[mdata,mtext,mraw]=xlsread('o.xlsx');
L=length(mraw);
[D,T,R]=xlsread('Ori.xlsx');
l=length(R);
for i=1:339
A(i)=mraw(i);
end
for j=1: 63314
B(j)=R(j);
end
for i=1:339
for j=1: 63314
if B(j)==A(i)
xlswrite('gotermofO.xlsx',B(j),'A1');
end
end
end
Undefined function 'eq' for input arguments of type 'cell error
  1 Comment
Walter Roberson
Walter Roberson on 10 Jun 2016
if isequal(B(j), A(i))
This makes no assumptions about the data types: it should work whether the cells are strings or numbers.
Caution: length() is the largest dimension, not the first dimension. Your mraw is generally going to be a 2D array, not a vector.
For efficiency you could be using
A = mraw(1:339);
B = R(1:53314);
Are you sure that you only want a single cell output into the spreadsheet ? Your code overwrites cell A1 each time it finds a match.
Your matching code could be much more efficient if your cells are all numeric or are all strings: in that case you could use ismember(B, A) to do the matching "in bulk"

Sign in to comment.

Categories

Find more on Characters and Strings in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!