No BSD License  

Highlights from
Delimit with text qualifier

from Delimit with text qualifier by fredikk
Parse text in respect of a text qualifier

delimited=delimitWithQualifier(str,delimiter,qualifier,comment)
function delimited=delimitWithQualifier(str,delimiter,qualifier,comment)
%function delimited=delimitWithQualifier(str,delimiter,qualifier,comment)
%inputs:    str:the string to be delimited
%           delimiter:the delimiter ex.','
%           qualifier:text qualifier ex.'"'
%           comment:a character denoting that the string is a comment to ignore ex.'#'
%
%example 1:
%delimited=delimitWithQualifier('mplampla,mpla,"mpla,mpla,mpla",mpla',',','"','#')
%returns delimited =  
%                   'mplampla'
%                   'mpla'
%                   'mpla,mpla,mpla'
%                   'mpla'
%
%example 2:
%delimited=delimitWithQualifier('#mplampla,mpla,"mpla,mpla,mpla",mpla',',','"','#')
%returns delimited =  
%                   []


if(~isempty(str)&&str(1)~=comment)
    qualIndices=strfind(str,qualifier);%qualifiers indices
    delimIndices=strfind(str,delimiter);%delimeters indices
    %remove the commas between qualifiers
    for i=1:2:length(qualIndices)
        %find delimiters that are between qualifiers
        a=find(delimIndices>qualIndices(i));
        b=find(delimIndices<qualIndices(i+1));
        c=ismember(a,b);%find commons, so has to been removed from delimiters vector
        d=nonzeros(a.*c);%indices of delimiters to remove
        e=(ismember(delimIndices,delimIndices(d))-1)*(-1);%invert, to keep
        delimIndices=nonzeros(delimIndices.*e)';
    end
    
    %cut in delimeters
    delimited={};
    position=1;
    for i=1:length(delimIndices)+1
        if(i<=length(delimIndices))
            s=str(position:delimIndices(i)-1);%remove qualifiers if there
        else
            s=str(position:end);
        end
 
        if(s(1)==qualifier)
            s=s(2:end);
        end
        if(s(end)==qualifier)
            s=s(1:end-1);
        end
        if(i<=length(delimIndices))
            position=delimIndices(i)+1;
        end
        delimited=[delimited;s];
    end
else
   delimited=[]; 
end

Contact us at files@mathworks.com