# HG changeset patch # User abarth93 # Date 1367326711 0 # Node ID 6f56b4d6f5335b7be946b4cb082af3b9b1acdb7a # Parent 8ba8f9abbbcf6425451f7ce06a3cf42ea690151e a matlab interpreter compatible version of strsplit diff -r 8ba8f9abbbcf -r 6f56b4d6f533 extra/ncArray/inst/private/strsplit.m --- a/extra/ncArray/inst/private/strsplit.m Tue Apr 30 12:53:37 2013 +0000 +++ b/extra/ncArray/inst/private/strsplit.m Tue Apr 30 12:58:31 2013 +0000 @@ -1,125 +1,41 @@ -## Copyright (C) 2009-2012 Jaroslav Hajek -## -## 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 3 of the License, 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, see -## . -## -## FIXME: this file is here to avoid conflicts with new Octave versions. Matlab -## has recently added strplit function (used to exist in Octave only) but -## their syntax is not compatible with ours. Rather than timing the -## release of each octave forge package that used strsplit, a copy of the -## old version was placed as private. Once the new Octave version is -## released, this file can be removed, and the calls to strsplit fixed. +% parts = strsplit(name,sep); +% +% A simple strsplit implementation. +% +% Once a strsplit becomes widespread in octave and Matlab, +% this file can be deleted. +% +% This file is preferred over octave's strsplit, because it is compatible +% with the Matlab interpreter. -## -*- texinfo -*- -## @deftypefn {Function File} {[@var{cstr}] =} strsplit (@var{s}, @var{sep}) -## @deftypefnx {Function File} {[@var{cstr}] =} strsplit (@var{s}, @var{sep}, @var{strip_empty}) -## Split the string @var{s} using one or more separators @var{sep} and return -## a cell array of strings. Consecutive separators and separators at -## boundaries result in empty strings, unless @var{strip_empty} is true. -## The default value of @var{strip_empty} is false. -## -## 2-D character arrays are split at separators and at the original column -## boundaries. -## -## Example: -## -## @example -## @group -## strsplit ("a,b,c", ",") -## @result{} -## @{ -## [1,1] = a -## [1,2] = b -## [1,3] = c -## @} -## -## strsplit (["a,b" ; "cde"], ",") -## @result{} -## @{ -## [1,1] = a -## [1,2] = b -## [1,3] = cde -## @} -## @end group -## @end example -## @seealso{strtok} -## @end deftypefn +function parts = strsplit(name,sep); -function cstr = strsplit (s, sep, strip_empty = false) +ind = find(name == sep); + +parts = cell(length(ind)+1,1); - if (nargin < 2 || nargin > 3) - print_usage (); - elseif (! ischar (s) || ! ischar (sep)) - error ("strsplit: S and SEP must be string values"); - elseif (! isscalar (strip_empty)) - error ("strsplit: STRIP_EMPTY must be a scalar value"); - endif - - if (isempty (s)) - cstr = cell (size (s)); - else - if (rows (s) > 1) - ## For 2-D arrays, add separator character at line boundaries - ## and transform to single string - s(:, end+1) = sep(1); - s = reshape (s.', 1, numel (s)); - s(end) = []; - endif +ind = [0 ind length(name)+1]; - ## Split s according to delimiter - if (isscalar (sep)) - ## Single separator - idx = find (s == sep); - else - ## Multiple separators - idx = strchr (s, sep); - endif - - ## Get substring lengths. - if (isempty (idx)) - strlens = length (s); - else - strlens = [idx(1)-1, diff(idx)-1, numel(s)-idx(end)]; - endif - ## Remove separators. - s(idx) = []; - if (strip_empty) - ## Omit zero lengths. - strlens = strlens(strlens != 0); - endif - - ## Convert! - cstr = mat2cell (s, 1, strlens); - endif - -endfunction +for i=1:length(parts) + parts{i} = name(ind(i)+1:ind(i+1)-1); +end -%!assert (strsplit ("road to hell", " "), {"road", "to", "hell"}) -%!assert (strsplit ("road to^hell", " ^"), {"road", "to", "hell"}) -%!assert (strsplit ("road to--hell", " -", true), {"road", "to", "hell"}) -%!assert (strsplit (["a,bc";",de"], ","), {"a", "bc", char(ones(1,0)), "de "}) -%!assert (strsplit (["a,bc";",de"], ",", true), {"a", "bc", "de "}) -%!assert (strsplit (["a,bc";",de"], ", ", true), {"a", "bc", "de"}) -%% Test input validation -%!error strsplit () -%!error strsplit ("abc") -%!error strsplit ("abc", "b", true, 4) -%!error strsplit (123, "b") -%!error strsplit ("abc", 1) -%!error strsplit ("abc", "def", ones (3,3)) +% Copyright (C) 2013 Alexander Barth +% +% 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, see . + +