-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsplit.m
More file actions
67 lines (60 loc) · 1.75 KB
/
split.m
File metadata and controls
67 lines (60 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
function c = split(delims, t, flag)
% SPLIT(DELIM, TEXT)
% Returns a cell array of the text segments of TEXT, where segments
% are delimited by the string DELIM.
%
% SPLIT({DELIM1, DELIM2, ...}, TEXT)
% Returns a cell array of the text segments of TEXT, where segments
% are delimited by any of the strings DELIM1, DELIM2, etc.
%
% SPLIT(..., 'i')
% Detects delimiters in a case-insensitive manner (default is case-
% sensitive).
%
% See also JOIN.
if nargin < 3, flag = ''; end
match = min(strmatch(lower(flag), {'sensitive', 'case sensitive', 'insensitive', 'case insensitive'}));
if isempty(match), error('unknown command option'),end
caseSensitive = (match==1 | match==2);
if nargin < 1, delims = {}; end
if isempty(delims), delims = num2cell(char([9:13 32])); end
if size(t,1)>1
c = {};
for i=1:size(t,1)
c1 = split(delims, t(i,:), flag);
c1 = [c1 cell(1, size(c,2) - size(c1,2))];
c = [c cell(size(c,1), size(c1,2) - size(c,2)); c1];
end
return
end
if isnumeric(delims), delims = char(delims); end
if ischar(delims), delims = {delims}; end
for i = 1:length(delims)
delims{i} = char(delims{i}(:)');
len(i) = length(delims{i});
end
[len i] = sort(-len);
len = -len; delims = delims(i);
t = t(:)';
c = {};
while ~isempty(t)
[s e] = findfirst(t, delims, caseSensitive);
if s == 0, c{end+1} = t; break, end
if s > 1, c{end+1} = t(1:s-1); end
t(1:e) = [];
end
%%%%%%%%%%%%%%%%%%%%%
function [startToken, endToken] = findfirst(s, tok, caseSensitive)
if ~caseSensitive, s = lower(s); tok = lower(tok); end
for i = 1:prod(size(tok))
len(i) = length(tok{i});
s(end+1:len(i)) = char(0);
startToken(i) = min([inf findstr(s, tok{i})]);
end
[startToken i] = min(startToken);
if isinf(startToken)
startToken = 0;
endToken = -1;
else
endToken = startToken + len(i) - 1;
end