[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
split
From: |
Søren Hauberg |
Subject: |
split |
Date: |
Sun, 30 Jan 2005 15:55:45 +0100 |
User-agent: |
Mozilla Thunderbird 1.0 (X11/20050111) |
Hi
I'm starting to do some work with rather large text files (5mb and
above) using the split function. On my slow laptop this isn't possible
because split is too slow (it takes hours) so I've altered the split
function to make it faster. I've attached my implementation.
I haven't done alot of testing but it should work, and it's much more fast.
/Søren
P.S. If this isn't the right place to post this, then I'm sorry
## Copyright (C) 1996 Kurt Hornik
##
## This file is part of Octave.
##
## Octave is free software; you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2, or (at your option)
## any later version.
##
## Octave is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with Octave; see the file COPYING. If not, write to the Free
## Software Foundation, 59 Temple Place - Suite 330, Boston, MA
## 02111-1307, USA.
## -*- texinfo -*-
## @deftypefn {Function File} {} split (@var{s}, @var{t})
## Divides the string @var{s} into pieces separated by @var{t}, returning
## the result in a string array (padded with blanks to form a valid
## matrix). For example,
##
## @example
## split ("Test string", "t")
## @result{} "Tes "
## " s "
## "ring"
## @end example
## @end deftypefn
## Author: Kurt Hornik <address@hidden>
## Adapted-By: jwe
function m = split (s, t)
if (nargin != 2)
usage ("split (s, t)");
endif
if (isstr (s) && isstr (t))
l_s = length (s);
l_t = length (t);
if (l_s == 0)
m = "";
return;
elseif (l_s < l_t)
error ("split: s must not be shorter than t");
endif
if (l_t == 0)
m = s';
return;
else
ind = findstr (s, t, 0);
if (length (ind) == 0)
m = s;
return;
endif
ind2 = [1, ind+l_t];
ind = [ind, l_s+1];
%ind = [1 - l_t, ind, l_s + 1];
endif
ind_diff = ind-ind2;
% Create a matrix of the correct size that's filled with spaces
m_rows = length(ind)
m_cols = max(ind_diff)
m = char( zeros(m_rows, m_cols) + ' ' );
% Copy the strings to the matrix
for i = 1:length(ind)
tmp = ind2(i):(ind(i)-1);
m(i, 1:length(tmp)) = s(tmp);
end
else
error ("split: both s and t must be strings");
endif
endfunction