# HG changeset patch # User jwe # Date 1142491525 0 # Node ID 52323f13c86b5c877f64834e9e0ffd0c98595664 # Parent a8f6903535c99a6f3a7291a5bf4b9f916f6b4912 [project @ 2006-03-16 06:45:08 by jwe] diff --git a/scripts/ChangeLog b/scripts/ChangeLog --- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,7 @@ +2006-03-16 William Poetra Yoga Hadisoeseno + + * strings/strfind.m: New file. + 2006-03-16 John W. Eaton * general/rows.m, general/columns.m: Delete. @@ -6,7 +10,7 @@ * strings/strcmpi.m: Simplify. * strings/strncmpi.m: Import from octave-forge, simplify. - * strings/strtrunc.m: New function. + * strings/strtrunc.m: New file. * strings/lower.m, strings/upper.m: Handle cellstr arguments. diff --git a/scripts/strings/strfind.m b/scripts/strings/strfind.m new file mode 100644 --- /dev/null +++ b/scripts/strings/strfind.m @@ -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 +## Created: 1 November 2004 +## Adapted-By: William Poetra Yoga Hadisoeseno + +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 diff --git a/test/ChangeLog b/test/ChangeLog --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2006-03-16 John W. Eaton + + * test_system.m: End all *pwent tests with a call to endpwent. + End all *grent tests with a call to endgrent. + 2006-03-14 John W. Eaton * fntests.m: Prettier printing of output. diff --git a/test/test_system.m b/test/test_system.m --- a/test/test_system.m +++ b/test/test_system.m @@ -468,6 +468,7 @@ %% test/octave.test/system/getpwent-1.m %!test %! s = getpwent (); +%! endpwent (); %! assert((isstruct (s) %! && struct_contains (s, "name") %! && struct_contains (s, "passwd") @@ -484,7 +485,7 @@ %!test %! x = getpwent (); %! y = getpwuid (x.uid); -%! +%! endpwent (); %! assert(strcmp (x.name, y.name) && x.uid == y.uid && x.gid == y.gid); %% test/octave.test/system/getpwuid-2.m @@ -497,7 +498,7 @@ %!test %! x = getpwent (); %! y = getpwnam (x.name); -%! +%! endpwent (); %! assert(strcmp (x.name, y.name) && x.uid == y.uid && x.gid == y.gid); %% test/octave.test/system/getpwnam-2.m @@ -511,7 +512,7 @@ %! x = getpwent (); %! setpwent (); %! y = getpwent (); -%! +%! endpwent (); %! assert(strcmp (x.name, y.name) && x.uid == y.uid && x.gid == y.gid); %% test/octave.test/system/setpwent-2.m @@ -523,6 +524,7 @@ %% test/octave.test/system/getgrent-1.m %!test %! x = getgrent (); +%! endgrent (); %! assert((isstruct (x) %! && struct_contains (x, "name") %! && struct_contains (x, "passwd") @@ -536,7 +538,7 @@ %!test %! x = getgrent (); %! y = getgrgid (x.gid); -%! +%! endgrent (); %! assert(strcmp (x.name, y.name) && x.gid == y.gid); %% test/octave.test/system/getgrgid-2.m @@ -549,7 +551,7 @@ %!test %! x = getgrent (); %! y = getgrnam (x.name); -%! +%! endgrent (); %! assert(strcmp (x.name, y.name) && x.gid == y.gid); %% test/octave.test/system/getgrnam-2.m @@ -563,7 +565,7 @@ %! x = getgrent (); %! setgrent (); %! y = getgrent (); -%! +%! endgrent (); %! assert(strcmp (x.name, y.name) && x.gid == y.gid); %% test/octave.test/system/setgrent-2.m