# HG changeset patch # User jwe # Date 1142480805 0 # Node ID 86adc85cc471c98da332632355aa3e9c0830691c # Parent 0dc67016832b809ccb697e8c1e55adc5dc112c9c [project @ 2006-03-16 03:46:45 by jwe] diff --git a/scripts/ChangeLog b/scripts/ChangeLog --- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,9 @@ +2006-03-15 William Poetra Yoga Hadisoeseno + + * strings/strcmpi.m: Simplify. + * strings/strncmpi.m: Import from octave-forge, simplify. + * strings/strtrunc.m: New function. + 2006-03-15 John W. Eaton * miscellaneous/doc.m: New file. diff --git a/scripts/strings/strcmpi.m b/scripts/strings/strcmpi.m --- a/scripts/strings/strcmpi.m +++ b/scripts/strings/strcmpi.m @@ -1,4 +1,4 @@ -## Copyright (C) 2000 Bill Lash +## Copyright (C) 2000 Bill Lash ## ## This file is part of Octave. ## @@ -19,24 +19,30 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} strcmpi (@var{s1}, @var{s2}) -## Compare two strings, ignoring case, returning 1 if -## they are the same, and 0 otherwise. +## Ignoring case, return 1 if the character strings @var{s1} and @var{s2} +## are the same, and 0 otherwise. ## -## Note: For compatibility with Matlab, Octave's strcmpi function -## returns 1 if the strings are equal, and 0 otherwise. This is -## just the opposite of the corresponding C library function. +## If either @var{s1} or @var{s2} is a cell array of strings, then an array +## of the same size is returned, containing the values described above for +## every member of the cell array. The other argument may also be a cell +## array of strings (of the same size or with only one element), char matrix +## or character string. +## +## @strong{Caution:} For compatibility with @sc{Matlab}, Octave's strcmpi +## function returns 1 if the character strings are equal, and 0 otherwise. +## This is just the opposite of the corresponding C library function. +## @seealso{strcmp, strncmp, strncmpi} ## @end deftypefn ## Author: Bill Lash ## Adapted-by: jwe -function status = strcmpi(s1, s2) +function retval = strcmpi (s1, s2) if (nargin == 2) - status = (ischar (s1) && ischar(s2) && strcmp (upper (s1), upper (s2))); + retval = strcmp (tolower (s1), tolower (s2)); else - usage ("strcmpi (s, t)"); + usage ("strcmpi (s1, s2)"); endif endfunction - diff --git a/scripts/strings/strncmp.m b/scripts/strings/strncmp.m --- a/scripts/strings/strncmp.m +++ b/scripts/strings/strncmp.m @@ -19,128 +19,27 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} strncmp (@var{s1}, @var{s2}, @var{n}) -## Compares the first @var{n} characters (columns) of two character -## strings, returning true if they are the same, and false otherwise. +## Return 1 if the first @var{n} characters of character strings @var{s1} +## and @var{s2} are the same, and 0 otherwise. +## +## If either @var{s1} or @var{s2} is a cell array of strings, then an array +## of the same size is returned, containing the values described above for +## every member of the cell array. The other argument may also be a cell +## array of strings (of the same size or with only one element), char matrix +## or character string. ## ## @strong{Caution:} For compatibility with @sc{Matlab}, Octave's strncmp -## function returns true if the character strings are equal, and false -## otherwise. This is just the opposite of the corresponding C library -## function. +## function returns 1 if the character strings are equal, and 0 otherwise. +## This is just the opposite of the corresponding C library function. +## @seealso{strcmp, strcmpi, strncmpi} ## @end deftypefn -## Author: jwe -## Adapted from strcmp.m by Tom Holroyd - function retval = strncmp (s1, s2, n) - if (nargin != 3) - usage ("strncmp (s, t, n)"); - endif - - retval = false; - - if (ischar (s1)) - [r1, c1] = size (s1); - if (ischar (s2)) - [r2, c2] = size (s2); - if (r1 == r2 && c1 == c2) - if (c1 == 0) - retval = true; - else - if (c1 > n) - t1 = s1(:, 1:n); - t2 = s2(:, 1:n); - retval = all (all (t1 == t2)); - else - retval = all (all (s1 == s2)); - endif - endif - elseif (r1 == r2) - if (r1 == 0) - retval = true; - else - l1 = min(n, c1); - l2 = min(n, c2); - if (l1 == l2) - t1 = s1(:, 1:l1); - t2 = s2(:, 1:l2); - retval = all (all (t1 == t2)); - endif - endif - endif - elseif (iscellstr (s2)) - [r2, c2] = size (s2); - if (r1 == 1) - t2 = s2(:); - m = length (t2); - retval = zeros (m, 1, "logical"); - for i = 1:m - retval(i) = strncmp (s1, t2{i}, n); - endfor - retval = reshape (retval, r2, c2); - elseif (r1 > 1) - if (r2 == 1 && c2 == 1) - t2 = s2{1}; - retval = zeros (r1, 1, "logical"); - for i = 1:r1 - retval(i) = strncmp (deblank (s1(i,:)), t2, n); - endfor - else - t2 = s2(:); - m = length (t2); - if (m == r1) - retval = zeros (m, 1, "logical"); - for i = 1:m - retval(i) = strncmp (deblank (s1(i,:)), t2{i}, n); - endfor - retval = reshape (retval, r2, c2); - else - error ("strncmp: nonconformant arrays"); - endif - endif - endif - endif - elseif (iscellstr (s1)) - [r1, c1] = size (s1); - if (ischar (s2)) - retval = strncmp (s2, s1, n, "logical"); - elseif (iscellstr (s2)) - [r2, c2] = size (s2); - if (r1 == 1 && c1 == 1) - t1 = s1{:}; - t2 = s2(:); - m = length (t2); - retval = zeros (m, 1); - for i = 1:m - retval(i) = strncmp (t1, t2{i}, n); - endfor - retval = reshape (retval, r2, c2); - elseif (r2 == 1 && c2 == 1) - ## retval = strncmp (s2, s1, n); - t1 = s1(:); - t2 = s2{:}; - m = length (t1); - retval = zeros (m, 1, "logical"); - for i = 1:m - retval(i) = strncmp (t1{i}, t2, n); - endfor - retval = reshape (retval, r1, c1); - elseif (r1 == r2 && c1 == c2) - t1 = s1(:); - t2 = s2(:); - m = length (t1); - for i = 1:m - retval(i) = strncmp (t1{i}, t2{i}, n); - endfor - retval = reshape (retval, r1, c1); - else - error ("strncmp: nonconformant cell arrays"); - endif - endif - endif - - if (n < 1) - retval = zeros (size (retval), "logical"); + if (nargin == 3) + retval = strcmp (strtrunc (s1, n), strtrunc (s2, n)); + else + usage ("strncmp (s1, s2, n)"); endif endfunction diff --git a/scripts/strings/strncmpi.m b/scripts/strings/strncmpi.m new file mode 100644 --- /dev/null +++ b/scripts/strings/strncmpi.m @@ -0,0 +1,45 @@ +## Copyright (C) 2000 Bill Lash +## +## This file is part of Octave. +## +## Octave 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, or (at your option) +## any later version. +## +## Octave 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 Octave; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn {Function File} {} strncmpi (@var{s1}, @var{s2}, @var{n}) +## Ignoring case, return 1 if the first @var{n} characters of character +## strings @var{s1} and @var{s2} are the same, and 0 otherwise. +## +## If either @var{s1} or @var{s2} is a cell array of strings, then an array +## of the same size is returned, containing the values described above for +## every member of the cell array. The other argument may also be a cell +## array of strings (of the same size or with only one element), char matrix +## or character string. +## +## @strong{Caution:} For compatibility with @sc{Matlab}, Octave's strncmpi +## function returns 1 if the character strings are equal, and 0 otherwise. +## This is just the opposite of the corresponding C library function. +## @seealso{strcmp, strcmpi, strncmp} +## @end deftypefn + +function retval = strncmpi (s1, s2, n) + + if (nargin == 3) + retval = strcmp (tolower (strtrunc (s1, n)), tolower (strtrunc (s2, n))); + else + usage ("strncmpi (s1, s2, n)"); + endif + +endfunction diff --git a/scripts/strings/strtrunc.m b/scripts/strings/strtrunc.m new file mode 100644 --- /dev/null +++ b/scripts/strings/strtrunc.m @@ -0,0 +1,54 @@ +## Copyright (C) 2006 William Poetra Yoga Hadisoeseno +## +## This file is part of Octave. +## +## Octave 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, or (at your option) +## any later version. +## +## Octave 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 Octave; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn {Function File} {} strtrunc (@var{s}, @var{n}) +## Truncate the character string @var{s} to length @var{n}. If @var{s} +## is a char matrix, then the number of columns are adjusted. +## +## If @var{s} is a cell array of strings, then the operation is performed +## on its members and the new cell array is returned. +## @end deftypefn + +function s = strtrunc (s, n) + + if (nargin != 2) + usage ("strtrunc (s, n)"); + endif + + if (ischar (s)) + s_was_char = true; + s = {s}; + else + s_was_char = false; + endif + + if (iscellstr (s)) + for i = 1:(numel (s)) + s{i} = s{i}(:,1:(min (n, columns (s{i})))); + endfor + else + error ("strtrunc: s must be a character string or a cell array of strings"); + endif + + if (s_was_char) + s = s{:}; + endif + +endfunction diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2006-03-15 William Poetra Yoga Hadisoeseno + + * src/strfns.cc: Fixed help message. + 2006-03-15 John W. Eaton * pager.cc (Fterminal_size): New function. diff --git a/src/strfns.cc b/src/strfns.cc --- a/src/strfns.cc +++ b/src/strfns.cc @@ -149,9 +149,17 @@ @deftypefn {Function File} {} strcmp (@var{s1}, @var{s2})\n\ Return 1 if the character strings @var{s1} and @var{s2} are the same,\n\ and 0 otherwise.\n\ -@strong{Caution:} For compatibility with @sc{Matlab}, Octave's strcmp\n\ -function returns 1 if the strings are equal, and 0 otherwise. This is\n\ -just the opposite of the corresponding C library function.\n\ +\n\ +If either @var{s1} or @var{s2} is a cell array of strings, then an array\n\ +of the same size is returned, containing the values described above for\n\ +every member of the cell array. The other argument may also be a cell\n\ +array of strings (of the same size or with only one element), char matrix\n\ +or character string.\n\ +\n\ +@strong{Caution:} For compatibility with @sc{Matlab}, Octave's strcmp\n\ +function returns 1 if the character strings are equal, and 0 otherwise.\n\ +This is just the opposite of the corresponding C library function.\n\ +@seealso{strcmpi, strncmp, strncmpi}\n\ @end deftypefn") { octave_value retval;