Mercurial > octave-libgccjit
diff scripts/strings/strfind.m @ 5678:52323f13c86b
[project @ 2006-03-16 06:45:08 by jwe]
author | jwe |
---|---|
date | Thu, 16 Mar 2006 06:45:25 +0000 |
parents | |
children | 067948dc39bf |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/strings/strfind.m Thu Mar 16 06:45:25 2006 +0000 @@ -0,0 +1,66 @@ +## Copyright (C) 2004 by Alois Schloegl +## +## This program is free software; you can redistribute it and/or +## modify it under the terms of the GNU General Public License +## as published by the Free Software Foundation; either version 2 +## of the License, or (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{idx} =} strfind (@var{str}, @var{pattern}) +## @deftypefnx {Function File} {@var{idx} =} strfind (@var{cellstr}, @var{pattern}) +## Search for @var{pattern} in the string @var{str} and return the +## starting index of every such occurrence in the vector @var{idx}. +## If there is no such occurrence, or if @var{pattern} is longer +## than @var{str}, then @var{idx} is the empty array @code{[]}. +## +## If the cell array of strings @var{cellstr} is specified instead of the +## string @var{str}, then @var{idx} is a cell array of vectors, as specified +## above. +## @seealso{findstr, strmatch, strcmp, strncmp, strcmpi, strncmpi} +## @end deftypefn + +## Author: alois schloegl <a.schloegl@ieee.org> +## Created: 1 November 2004 +## Adapted-By: William Poetra Yoga Hadisoeseno <williampoetra@gmail.com> + +function idx = strfind (text, pattern) + + if (nargin != 2) + usage ("idx = strfind (text, pattern)"); + elseif (! ischar (pattern)) + error ("strfind: pattern must be a string value"); + endif + + lp = length (pattern); + + if (ischar (text)) + idx = __strfind_string__ (text, pattern, lp); + elseif (iscellstr (text)) + idx = cell (size (text)); + for i = 1:(numel (text)) + idx{i} = __strfind_string__ (text{i}, pattern, lp); + endfor + else + error ("strfind: text must be a string or cell array of strings"); + endif + +### endfunction + +function idx = __strfind_string__ (text, pattern, lp) + + idx = 1:(length (text) - lp + 1); + k = 0; + while (k < lp && ! isempty (idx)) + idx = idx(text(idx + k) == pattern(++k)); + endwhile + +### endfunction