K = STRFIND(TEXT,PATTERN)
I am trying to find Pattern in an array of many rows but I am receiving an error : ??? Error using ==> strfind Input strings must have one row
Is there any function taht would substitute strfind in this case?
No products are associated with this question.
You have a couple of choices with STRFIND. You could loop over the rows, or pad the array with NANs (or other irrelevant value) then reshape to one long string. For example:
A = [1 2 3 4 5 6;7 6 5 6 3 2;1 2 3 4 5 6]
for ii = 1:size(A,1)
L{ii} = strfind(A(ii,:),[5 6]); % Preall if large A.
end
B = [A nan(size(A,1),1)];
strfind(reshape(B.',1,[]),[5 6])
a=['Congratulations'
'to Walter '
'for his 4000 '
'reputation '
'points ']
rc=[];
for r=1:size(a,1)
c=strfind(a(r,:),'Walter');
if ~isempty(c)
rc=[rc; r c]; %just in case the word appears multiple times
end
end
rc %first column is the row and second column is the column where the word is
STRFIND works on cells too:
a=['Congratulations'
'to Walter '
'for his 4000 '
'reputation '
'points '
'WalterWalterWal']
pat = 'Wal'
strfind(cellstr(a),pat)
This is a possible solution ... not perfect though:
% % Look for a in b. Returns cell array of % strfind results for each row. % % Usage: strfindmultirow(<searchdata>, <searchpattern>); % % e.g. if: % % a=['Congratulations' % 'to Walter ' % 'for his 4000 ' % 'reputation ' % 'points '] % % rc = strfindmultirow(a, 'a'); % % yields: % rc = strfindmultirow(a, 'a') % ans = [1x2 double] [5] [] [6] [] % function rc = strfindmultirow(a, b)
rc={};
for r=1:size(a,1)
c=strfind(a(r,:), b);
rc{length(rc) + 1} = c;
end
1 Comment
Direct link to this comment:
http://www.mathworks.ch/matlabcentral/answers/10546#comment_23215
Does your pattern take up multiple rows?