Mercurial > hg > octave-nkf
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 |
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 | 2 ## |
3 ## This file is part of Octave. | |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7016 | 7 ## the Free Software Foundation; either version 3 of the License, or (at |
8 ## your option) any later version. | |
5674 | 9 ## |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
7016 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
5674 | 18 |
19 ## -*- texinfo -*- | |
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 | 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 | 25 ## @end deftypefn |
26 | |
27 function s = strtrunc (s, n) | |
28 | |
29 if (nargin != 2) | |
6046 | 30 print_usage (); |
5674 | 31 endif |
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 | 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 | 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 | 53 endif |
54 | |
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 |