changeset 5674:86adc85cc471

[project @ 2006-03-16 03:46:45 by jwe]
author jwe
date Thu, 16 Mar 2006 03:46:45 +0000
parents 0dc67016832b
children c5f6623514c4
files scripts/ChangeLog scripts/strings/strcmpi.m scripts/strings/strncmp.m scripts/strings/strncmpi.m scripts/strings/strtrunc.m src/ChangeLog src/strfns.cc
diffstat 7 files changed, 151 insertions(+), 129 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ChangeLog	Thu Mar 16 03:08:58 2006 +0000
+++ b/scripts/ChangeLog	Thu Mar 16 03:46:45 2006 +0000
@@ -1,3 +1,9 @@
+2006-03-15  William Poetra Yoga Hadisoeseno  <williampoetra@gmail.com>
+
+	* strings/strcmpi.m: Simplify.
+	* strings/strncmpi.m: Import from octave-forge, simplify.
+	* strings/strtrunc.m: New function.
+
 2006-03-15  John W. Eaton  <jwe@octave.org>
 
 	* miscellaneous/doc.m: New file.
--- a/scripts/strings/strcmpi.m	Thu Mar 16 03:08:58 2006 +0000
+++ b/scripts/strings/strcmpi.m	Thu Mar 16 03:46:45 2006 +0000
@@ -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 <lash@tellabs.com>
 ## 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
-
--- a/scripts/strings/strncmp.m	Thu Mar 16 03:08:58 2006 +0000
+++ b/scripts/strings/strncmp.m	Thu Mar 16 03:46:45 2006 +0000
@@ -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 <tomh@kurage.nimh.nih.gov>
-
 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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/strings/strncmpi.m	Thu Mar 16 03:46:45 2006 +0000
@@ -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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/strings/strtrunc.m	Thu Mar 16 03:46:45 2006 +0000
@@ -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
--- a/src/ChangeLog	Thu Mar 16 03:08:58 2006 +0000
+++ b/src/ChangeLog	Thu Mar 16 03:46:45 2006 +0000
@@ -1,3 +1,7 @@
+2006-03-15  William Poetra Yoga Hadisoeseno  <williampoetra@gmail.com>
+
+	* src/strfns.cc: Fixed help message.
+
 2006-03-15  John W. Eaton  <jwe@octave.org>
 
 	* pager.cc (Fterminal_size): New function.
--- a/src/strfns.cc	Thu Mar 16 03:08:58 2006 +0000
+++ b/src/strfns.cc	Thu Mar 16 03:46:45 2006 +0000
@@ -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;