annotate scripts/strings/strtrunc.m @ 15063:36cbcc37fdb8

Refactor configure.ac to make it more understandable. Use common syntax for messages in config.h Correct typos, refer to libraries in all caps, use two spaces after period. Follow Autoconf guidelines and place general tests before specific tests. * configure.ac, m4/acinclude.m4: Use common syntax for messages in config.h Correct typos, refer to libraries in all caps, use two spaces after period. Follow Autoconf guidelines and place general tests before specific tests.
author Rik <rik@octave.org>
date Tue, 31 Jul 2012 10:28:51 -0700
parents f3d52523cde1
children d63878346099
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14138
72c96de7a403 maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents: 13306
diff changeset
1 ## Copyright (C) 2006-2012 William Poetra Yoga Hadisoeseno
5674
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
2 ##
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
3 ## This file is part of Octave.
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
4 ##
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6046
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6046
diff changeset
8 ## your option) any later version.
5674
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
9 ##
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
13 ## General Public License for more details.
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
14 ##
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6046
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6046
diff changeset
17 ## <http://www.gnu.org/licenses/>.
5674
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
18
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
19 ## -*- texinfo -*-
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
20 ## @deftypefn {Function File} {} strtrunc (@var{s}, @var{n})
9036
58604c45ca74 Cleanup of data types related documentation
Rik <rdrider0-list@yahoo.com>
parents: 8920
diff changeset
21 ## Truncate the character string @var{s} to length @var{n}. If @var{s}
13301
29a4d3b4211e strtrunc.m: Add support and %!test for char arrays as cellstr elements
Rik <octave@nomad.inbox5.com>
parents: 13300
diff changeset
22 ## is a character matrix, then the number of columns is adjusted.
5674
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
23 ## If @var{s} is a cell array of strings, then the operation is performed
13301
29a4d3b4211e strtrunc.m: Add support and %!test for char arrays as cellstr elements
Rik <octave@nomad.inbox5.com>
parents: 13300
diff changeset
24 ## on each cell element and the new cell array is returned.
5674
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
25 ## @end deftypefn
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
26
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
27 function s = strtrunc (s, n)
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
28
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
29 if (nargin != 2)
6046
34f96dd5441b [project @ 2006-10-10 16:10:25 by jwe]
jwe
parents: 5674
diff changeset
30 print_usage ();
5674
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
31 endif
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
32
13306
ad9b78544a22 strtrunc.m: Add input validation and tests for length argument n.
Rik <octave@nomad.inbox5.com>
parents: 13304
diff changeset
33 n = fix (n);
ad9b78544a22 strtrunc.m: Add input validation and tests for length argument n.
Rik <octave@nomad.inbox5.com>
parents: 13304
diff changeset
34 if (! isscalar (n) || n < 0)
ad9b78544a22 strtrunc.m: Add input validation and tests for length argument n.
Rik <octave@nomad.inbox5.com>
parents: 13304
diff changeset
35 error ("strtrunc: length N must be a positive integer (N >= 0)");
ad9b78544a22 strtrunc.m: Add input validation and tests for length argument n.
Rik <octave@nomad.inbox5.com>
parents: 13304
diff changeset
36 endif
ad9b78544a22 strtrunc.m: Add input validation and tests for length argument n.
Rik <octave@nomad.inbox5.com>
parents: 13304
diff changeset
37
5674
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
38 if (ischar (s))
13298
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
39 if (n < columns (s))
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
40 s = s(:, 1:n);
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
41 endif
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
42 elseif (iscellstr (s))
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
43 ## Convoluted approach converts cellstr to char matrix, trims the character
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
44 ## matrix using indexing, and then converts back to cellstr with mat2cell.
13301
29a4d3b4211e strtrunc.m: Add support and %!test for char arrays as cellstr elements
Rik <octave@nomad.inbox5.com>
parents: 13300
diff changeset
45 ## This approach is 24X faster than using cellfun with call to strtrunc
13306
ad9b78544a22 strtrunc.m: Add input validation and tests for length argument n.
Rik <octave@nomad.inbox5.com>
parents: 13304
diff changeset
46 idx = cellfun ("size", s, 2) > n;
13301
29a4d3b4211e strtrunc.m: Add support and %!test for char arrays as cellstr elements
Rik <octave@nomad.inbox5.com>
parents: 13300
diff changeset
47 rows = cellfun ("size", s(idx), 1);
13306
ad9b78544a22 strtrunc.m: Add input validation and tests for length argument n.
Rik <octave@nomad.inbox5.com>
parents: 13304
diff changeset
48 if (! isempty (rows))
ad9b78544a22 strtrunc.m: Add input validation and tests for length argument n.
Rik <octave@nomad.inbox5.com>
parents: 13304
diff changeset
49 s(idx) = mat2cell (char (s(idx))(:, 1:n), rows);
ad9b78544a22 strtrunc.m: Add input validation and tests for length argument n.
Rik <octave@nomad.inbox5.com>
parents: 13304
diff changeset
50 endif
5674
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
51 else
11472
1740012184f9 Use uppercase for variable names in error() strings to match Info documentation. Only m-files done.
Rik <octave@nomad.inbox5.com>
parents: 9036
diff changeset
52 error ("strtrunc: S must be a character string or a cell array of strings");
5674
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
53 endif
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
54
86adc85cc471 [project @ 2006-03-16 03:46:45 by jwe]
jwe
parents:
diff changeset
55 endfunction
8442
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
56
13298
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
57
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
58 %!assert (strtrunc ("abcdefg", 4), "abcd")
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
59 %!assert (strtrunc ("abcdefg", 10), "abcdefg")
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
60 %!assert (strtrunc (char ("abcdef", "fedcba"), 3), ["abc"; "fed"])
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
61 %!assert (strtrunc ({"abcdef", "fedcba"}, 3), {"abc", "fed"})
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
62 %!assert (strtrunc ({"", "1", "21", "321"}, 1), {"", "1", "2", "3"})
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
63 %!assert (strtrunc ({"1", "", "2"}, 1), {"1", "", "2"})
13301
29a4d3b4211e strtrunc.m: Add support and %!test for char arrays as cellstr elements
Rik <octave@nomad.inbox5.com>
parents: 13300
diff changeset
64 %!test
29a4d3b4211e strtrunc.m: Add support and %!test for char arrays as cellstr elements
Rik <octave@nomad.inbox5.com>
parents: 13300
diff changeset
65 %! cstr = {"line1"; ["line2"; "line3"]; "line4"};
29a4d3b4211e strtrunc.m: Add support and %!test for char arrays as cellstr elements
Rik <octave@nomad.inbox5.com>
parents: 13300
diff changeset
66 %! y = strtrunc (cstr, 4);
29a4d3b4211e strtrunc.m: Add support and %!test for char arrays as cellstr elements
Rik <octave@nomad.inbox5.com>
parents: 13300
diff changeset
67 %! assert (size (y), [3, 1]);
29a4d3b4211e strtrunc.m: Add support and %!test for char arrays as cellstr elements
Rik <octave@nomad.inbox5.com>
parents: 13300
diff changeset
68 %! assert (size (y{2}), [2, 4]);
29a4d3b4211e strtrunc.m: Add support and %!test for char arrays as cellstr elements
Rik <octave@nomad.inbox5.com>
parents: 13300
diff changeset
69 %! assert (y{2}, repmat ("line", 2, 1));
13298
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
70
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
71 %% Test input validation
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
72 %!error strtrunc ()
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
73 %!error strtrunc ("abcd")
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
74 %!error strtrunc ("abcd", 4, 5)
13306
ad9b78544a22 strtrunc.m: Add input validation and tests for length argument n.
Rik <octave@nomad.inbox5.com>
parents: 13304
diff changeset
75 %!error <N must be a positive integer> strtrunc ("abcd", ones (2,2))
ad9b78544a22 strtrunc.m: Add input validation and tests for length argument n.
Rik <octave@nomad.inbox5.com>
parents: 13304
diff changeset
76 %!error <N must be a positive integer> strtrunc ("abcd", -1)
13298
86d18a3cc911 strtrunc.m: Recode for 28X speedup for cellstr inputs
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
77 %!error <S must be a character string or a cell array of strings> strtrunc (1, 1)
13301
29a4d3b4211e strtrunc.m: Add support and %!test for char arrays as cellstr elements
Rik <octave@nomad.inbox5.com>
parents: 13300
diff changeset
78