match a word/string
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Bharat
am 26 Nov. 2014
Bearbeitet: per isakson
am 27 Nov. 2014
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 Kommentare
Image Analyst
am 27 Nov. 2014
Bearbeitet: Image Analyst
am 27 Nov. 2014
Well you didn't have a closing apostrophe on the "if" line. But why not just use my answer?
Akzeptierte Antwort
per isakson
am 27 Nov. 2014
Bearbeitet: per isakson
am 27 Nov. 2014
if file(i,1)=='GDD51'   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,  if  of recent Matlab versions applies an implicit  all.   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 Kommentare
Image Analyst
am 27 Nov. 2014
Any reason why you chose not to use ismember(), which is how I think most MATLABers would do it?
per isakson
am 27 Nov. 2014
Bearbeitet: per isakson
am 27 Nov. 2014
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.
Weitere Antworten (1)
Image Analyst
am 26 Nov. 2014
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 Kommentar
Image Analyst
am 27 Nov. 2014
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);
Siehe auch
Kategorien
Mehr zu Characters and Strings finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!