-
Notifications
You must be signed in to change notification settings - Fork 0
/
wsstrtok.m
33 lines (26 loc) · 1.42 KB
/
wsstrtok.m
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
function [token remainder] = wsstrtok(str)
%This function behaves much like the builtin function strtok except that it preserves leading and trailing whitespace
%e.g. strtok( 'this is a test' ) returns ['this' 'is a test] while
%wsstrtok('this is a test') returns ['this ' 'is a test'].
%Thus for wsstrtok, strcmp(strcat(token,remainder),str) = true
if isempty(str)
return
end;
token = '';
%Read beginning whitespace characters
while ~isempty(str) && (strncmp(str,' ',1) || strncmp(str,'\t',1) || strncmp(str,'\n',1) || strncmp(str,char(10),1) || strncmp( str, '\r', 1) || strncmp(str,'\l',1 ))
token = [token str(1)]; %Note you cannot replace this with strcat as strcat removes trailing whitespace
str = str(2:length(str));
end
%Read non-whitespace characters off the front
while ~isempty(str) && ~(strncmp(str,' ',1) || strncmp(str,'\t',1) || strncmp(str,'\n',1) || strncmp(str,char(10),1) || strncmp( str, '\r', 1) || strncmp(str,'\l',1 ))
token = [token str(1)]; %Note you cannot replace this with strcat as strcat removes trailing whitespace
str = str(2:length(str));
end
%Read additional whitespace characters
while ~isempty(str) && (strncmp(str,' ',1) || strncmp(str,'\t',1) || strncmp(str,'\n',1) || strncmp(str,char(10),1) || strncmp( str, '\r', 1) || strncmp(str,'\l',1 ))
token = [token str(1)]; %Note you cannot replace this with strcat as strcat removes trailing whitespace
str = str(2:length(str));
end
remainder = str;
return