# HG changeset patch # User Rik # Date 1316450272 25200 # Node ID 4e92b71dcc97f1bea62f45986d42fecf9a144c1f # Parent a8184fb6b0c7bd773e58fe3d61e31fdfd77b0426 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. diff --git a/scripts/strings/deblank.m b/scripts/strings/deblank.m --- 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 deblank (); %!error deblank ("foo", "bar");