match a word/string

8 次查看(过去 30 天)
Bharat
Bharat 2014-11-26
编辑: per isakson 2014-11-27
Hi all. I have a file, in which the first column which contains 27k rows of words/strings. (eg:GDD51). I need to search a particular string and create another file with all values corresponding to the second column in that file. The problem is, i can't search for a string. It says error! Can someone help me. this is the code i used:
x=0;
for i=1:27099
if file(i,1)=='GDD51
x=x+1;
newfile(x,1)=file(i,2);
end
end
And i get this error: Undefined function 'eq' for input arguments of type 'table'. Please help,Thanks
  3 个评论
Bharat
Bharat 2014-11-27
Sorry Geoff, I am new to matlab and this site. I apologize that I didn't post the query properly.
Image Analyst
Image Analyst 2014-11-27
编辑:Image Analyst 2014-11-27
Well you didn't have a closing apostrophe on the "if" line. But why not just use my answer?

请先登录,再进行评论。

采纳的回答

per isakson
per isakson 2014-11-27
编辑:per isakson 2014-11-27
if file(i,1)=='GDD51' &nbsp will not work for two reasons
Firstly, the comparison is made position by position. The result is a vector of logical. To assert identical strings all must be true.
>> 'ABC'=='AAA'
ans =
1 0 0
>> all( 'ABC'=='AAA' )
ans =
0
However,&nbsp if&nbsp of recent Matlab versions applies an implicit&nbsp all. &nbsp That was not always the case(?). See if, elseif, else
[...] An expression is true when its result is nonempty and contains
only nonzero elements (logical or real numeric).
Secondly, the strings must have the same length else an error is thrown
>> 'ABC'=='AABCA'
Error using ==
Matrix dimensions must agree.
I think, the best code is (not tested)
>> newfile = file( strcmp( 'GDD51', file(:,1) ), 2 );
  3 个评论
Image Analyst
Image Analyst 2014-11-27
Any reason why you chose not to use ismember(), which is how I think most MATLABers would do it?
per isakson
per isakson 2014-11-27
编辑:per isakson 2014-11-27
According to my old rule of thumb
ism = strcmp( str, cell_array_of_strings );
is significantly faster than
ism = ismember( str, cell_array_of_strings );
(This is a special case to ismember)
However, that might have changed.

请先登录,再进行评论。

更多回答(1 个)

Image Analyst
Image Analyst 2014-11-26
Try this:
% Create sample data
cellArrayOfStrings = {'No Match this index', 'GDD51', 'no match here either'};
% Find index where cell contents = 'GDD51'
index = ismember(cellArrayOfStrings, 'GDD51')
  1 个评论
Image Analyst
Image Analyst 2014-11-27
Regarding your edit for making a file of the second column where it's true
fid = fopen(filename, 'wt');
for k = 1 : length(index)
if index(k)
fprintf(fid, '%s\n', cellArrayOfStrings{k});
end
end
fclose(fid);

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Characters and Strings 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by