Parse.m
Revision as of 15:51, 5 August 2010 by 128.111.101.185 (talk) (Created page with '<pre> %PARSE2.M %Takes a string and returns val token. %Returns [] if val token does not exist. %Returns val token and rest of line if val<0 including any blanks. %returns cell a…')
%PARSE2.M
%Takes a string and returns val token.
%Returns [] if val token does not exist.
%Returns val token and rest of line if val<0 including any blanks.
%returns cell array of all tokens if val==0.
%does the same thing as parse.m in a slightly different way.
%useage: out=parse(string,val)
function [out,rem]=parse(string,val);
out=[];
cout={};
maxline=0;
for irow=1:size(string,1),
p=[];
r=string(irow,:);
while ~isempty(r),
[t,r]=strtok(r);
p=strvcat(p,t);
end
prow{irow}=p;
%pad lines with blanks to make all matrices on row same length
maxline=max(maxline,size(p,1));
end
for irow=1:size(string,1),
p=prow{irow};
%pad lines with blanks to make all matrices on row same length
nline=maxline-size(p,1);
for iline=1:nline,
p=strvcat(p,' ');
end
cout=[cout cellstr(p)];
end
cout=cout';
if abs(val)<=size(cout,2),
if val<0,
if length(val)~=1,
error('parse.m: for val < 1, length(val) == 1.');
end
val=abs(val):size(cout,2);
end
if val~=0,
for irow=1:size(cout,1),
tout=[];
for icol=val,
tout=[tout cout{irow,icol} ' ' ];
end
out=strvcat(out,tout);
end
out=deblank(out);
else,
out=cout;
end
end
return
%TODO
%make work for string arrays with different numbers of words on
%each line.
%if no val field put in an empty cell
%add rem output of (val+1):end as a string