diff toolboxes/bioakustik_tools/strings/substr.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/strings/substr.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+function outstr = substr(str, offset, len, repl)
+%SUBSTR Extract a substring out of a string.
+%
+%   SUBSTR(STRING, OFFSET, LENGTH) extracts a substring out of STRING with
+%   given LENGTH starting at the given OFFSET.  First character is at offset 0.
+%   If OFFSET is negative, starts that far from the end of the string.  If
+%   LENGTH is omitted, returns everything to the end of the string.  If LENGTH
+%   is negative, removes that many characters from the end of the string.
+%
+%   SUBSTR(STRING, OFFSET, LENGTH, REPLACEMENT) will not return the substring
+%   as specified by STRING, OFFSET, and LENGTH (see above) but rather replace
+%   it by REPLACEMENT and return the result.
+%
+%   Examples:
+%
+%      Get first character:              substr(string,  0, 1)
+%      Get last character:               substr(string, -1, 1)
+%      Remove first character:           substr(string,  1)
+%      Remove last character:            substr(string,  0, -1)
+%      Remove first and last character:  substr(string,  1, -1)
+%
+%   SUBSTR is a MATLAB version of the Perl operator with the same name.
+%   However, unlike Perl's SUBSTR, no warning is produced if the substring is
+%   totally outside the string.
+
+%   Author:      Peter J. Acklam
+%   Time-stamp:  2004-02-21 22:49:14 +0100
+%   E-mail:      pjacklam@online.no
+%   URL:         http://home.online.no/~pjacklam
+
+   % Check number of input arguments.
+   error(nargchk(2, 4, nargin));
+
+   n = length(str);
+
+   % Get lower index.
+   lb = offset + 1;             % offset from beginning of string
+   if offset < 0
+      lb = lb + n;              % offset from end of string
+   end
+   lb = max(lb, 1);
+
+   % Get upper index.
+   if nargin == 2               % SUBSTR(STR, OFFSET)
+      ub = n;
+   elseif nargin > 2            % SUBSTR(STR, OFFSET, LEN)
+      if len >= 0
+         ub = lb + len - 1;
+      else
+         ub = n + len;
+      end
+      ub = min(ub, n);
+   end
+
+   % Extract or replace substring.
+   if nargin < 4
+      outstr = str(lb : ub);                        % extract substring
+   else
+      outstr = [str(1:lb-1) repl str(ub+1:end)];    % replace substring
+   end