2017-05-16 15:10:20 +02:00
|
|
|
function tokens = tokenize(source,delimiter)
|
|
|
|
% syntax
|
|
|
|
% tokens = tokenize(source,delimiters)
|
|
|
|
%
|
|
|
|
% source is a string to be broken into tokens
|
|
|
|
% delimiters is a character array of single character delimiters
|
|
|
|
% tokens is a cell string array containing the tokens
|
|
|
|
|
|
|
|
|
|
|
|
posdelims = [];
|
|
|
|
|
|
|
|
% assumes that delimiter cannot be in the first position or the last
|
|
|
|
% position
|
|
|
|
ndelimiters = size(delimiter,1);
|
|
|
|
for i=1:ndelimiters
|
|
|
|
newpositions = strfind(source,delimiter(i,:));
|
|
|
|
if ~isempty(newpositions)
|
|
|
|
posdelims =[posdelims, newpositions];
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
% reorder posdelims in ascending order
|
|
|
|
posdelims = sort(posdelims);
|
|
|
|
|
|
|
|
if isempty(posdelims)
|
|
|
|
tokens = cellstr(source);
|
|
|
|
else
|
|
|
|
ndelims = length(posdelims);
|
|
|
|
% build positions for substrings
|
|
|
|
delims = zeros(ndelims+1,2);
|
|
|
|
for i=1:ndelims+1
|
|
|
|
if i==1
|
|
|
|
if posdelims(1) == 1
|
|
|
|
tokens = cellstr(source(1));
|
|
|
|
else
|
|
|
|
delims(i,:) = [1,posdelims(i)-1];
|
|
|
|
tokens = cellstr(source([delims(i,1):delims(i,2)]));
|
|
|
|
tokens = [tokens, source(posdelims(i))];
|
|
|
|
end
|
|
|
|
elseif i==ndelims+1
|
|
|
|
if (posdelims(i-1) < length(source))
|
|
|
|
delims(i,:) = [posdelims(i-1)+1,length(source)];
|
|
|
|
tokens = [tokens, cellstr(source([delims(i,1):delims(i,2)]))];
|
|
|
|
end
|
|
|
|
else
|
|
|
|
if posdelims(i)>posdelims(i-1)+1
|
|
|
|
delims(i,:) = [posdelims(i-1)+1,posdelims(i)-1];
|
|
|
|
tokens = [tokens, cellstr(source([delims(i,1):delims(i,2)]))];
|
|
|
|
end
|
|
|
|
tokens = [tokens, source(posdelims(i))];
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|