changeset 13162:4e92b71dcc97

deblank.m: Modified to accept nested cellstr arrays (Bug #34123) * deblank.m: Divide work between regexprep on string portions of input and recursive cellfun call on cell elements.
author Rik <octave@nomad.inbox5.com>
date Mon, 19 Sep 2011 09:37:52 -0700
parents a8184fb6b0c7
children 2ca9730d35ba 6d57e53b21ea
files scripts/strings/deblank.m
diffstat 1 files changed, 17 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/strings/deblank.m
+++ b/scripts/strings/deblank.m
@@ -54,9 +54,18 @@
       s = s(:,1:ceil (max (k) / rows (s)));
     endif
 
-  elseif (iscellstr (s))
+  elseif (iscell (s))
 
-    s = regexprep (s, "[\\s\v\\0]+$", '');
+    char_idx = cellfun ("isclass", s, "char");
+    cell_idx = cellfun ("isclass", s, "cell");
+    if (! all (char_idx | cell_idx))  
+      error ("deblank: S argument must be a string or cellstring");
+    endif
+
+    ## Divide work load.  Recursive cellfun deblank call is slow
+    ## and avoided where possible.
+    s(char_idx) = regexprep (s(char_idx), "[\\s\v\\0]+$", '');
+    s(cell_idx) = cellfun ("deblank", s(cell_idx), "UniformOutput", false);
 
   else
     error ("deblank: S argument must be a string or cellstring");
@@ -65,11 +74,12 @@
 endfunction
 
 
-%!assert (strcmp (deblank (" f o o \0"), " f o o"));
-%!assert (deblank ('   '), '')
-%!assert (deblank ("   "), "")
-%!assert (deblank (""), "")
-%!assert (deblank ({}), {})
+%!assert (deblank (" f o o \0"), " f o o");
+%!assert (deblank ('   '), '');
+%!assert (deblank ("   "), "");
+%!assert (deblank (""), "");
+%!assert (deblank ({}), {});
+%!assert (deblank ({" abc   ", {"   def   "}}), {" abc", {"   def"}});
 
 %!error <Invalid call to deblank> deblank ();
 %!error <Invalid call to deblank> deblank ("foo", "bar");