view aim-mat/tools/str2cell.m @ 4:537f939baef0 tip

various bug fixes and changed copyright message
author Stefan Bleeck <bleeck@gmail.com>
date Tue, 16 Aug 2011 14:37:17 +0100
parents 20ada0af3d7d
children
line wrap: on
line source
% tool
% 
%   INPUT VALUES:
%  
%   RETURN VALUE:
%
% 
% This external file is included as part of the 'aim-mat' distribution package
% (c) 2011, University of Southampton
% Maintained by Stefan Bleeck (bleeck@gmail.com)
% download of current version is on the soundsoftware site: 
% http://code.soundsoftware.ac.uk/projects/aimmat
% documentation and everything is on http://www.acousticscale.org


function c = str2cell(varargin)
%STR2CELL Convert a string to a cell array of lines.
%
%   C = STR2CELL(STR) creates a cell array C where each cell contains a line
%   of the string STR.
%
%   C = STR2CELL(STR, OPTS), where OPTS is 'L', 'T' or both, removes leading
%   and/or trailing blank lines from the string before converting to a cell
%   array.
%
%   If the string contains LFs (linefeed characters, decimal 10), the input
%   string is split at their position after all CRs (carriage return
%   characters, decimal 13) have been removed. If there are no LFs, the
%   string is split at the position of the CRs. This should ensure that the
%   string is split correctly with both UNIX (LF), DOS (CR+LF) and MAC (CR)
%   definitions of a newline.

%   Author:      Peter J. Acklam
%   Time-stamp:  2002-03-03 13:44:44 +0100
%   E-mail:      pjacklam@online.no
%   URL:         http://home.online.no/~pjacklam

   error(nargchk(1, 3, nargin));

   %
   % Assign default values to parameters that can be changed by command line
   % options.
   %
   strip_lead  = 0;
   strip_trail = 0;

   %
   % Process command line options.
   %
%    while length(varargin) > 1
%       opt = varargin{2};
%       if ~ischar(opt)
%          error('Options must be strings.');
%       end
%       switch opt
%          case { 'l', 'L' }
%             strip_lead = 1;
%          case { 'u', 'U' }
%             strip_trail = 1;
%          otherwise
%             error([ 'Unknown option: ' opt ]);
%       end
%       varargin(2) = [];
%    end
   str = varargin{1};

   %
   % Strip leading blank lines.
   %
   if strip_lead
      k = find(~isspace(str));
      if ~isempty(k)
         k = min(k);
         str = str(k:end);
      end
   end

   %
   % Strip trailing blank lines.
   %
   if strip_trail
      k = find(~isspace(str));
      if ~isempty(k)
         k = max(k);
         str = str(1:k);
      end
   end

   %
   % Quick exit if string is empty.
   %
   if isempty(str)
      c = { '' };
      return
   end

   %
   % Find the characters that separate the lines.
   %
   
   % just a hack from me... sorry... no time
   
   % strip []
   if str(1)=='['
       str=str(2:end-1);
   end
   k = find(str == 10);                 % find all LF chars
   l = find(str == 13);                 % find all CR chars
   m=find(str==' ');
   if isempty(m)
       m=length(str)+1;
   end
   if isempty(k)                        % if no LF chars were found
      k = l;                            %   split at CR chars
   else                                 % or else
      if ~isempty(l)                    %   if there are CR chars
         str(l) = [];                   %      remove them
         k = find(str == 10);           %      find all LF chars
      end
   end

   %
   % Avoid empty last string in output list when string ends in a newline.
   %
   if ~isempty(k) & k(end) == length(str)
      k = [ 0 k ];                      % add beginning
   else
      k = [ 0 k length(str)+1 ];        % add beginning and end
   end

   %
   % Now split the string into lines.
   %
   n = length(m);                   % number of lines
   c = cell(n,1);                      % initialize output
    m=[0 m];
   for i = 1:n
      c{i} = str(m(i)+1 : m(i+1)-1);    % extract line
   end