annotate scripts/strings/strmatch.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 bc924baa2c4e
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: 13141
diff changeset
1 ## Copyright (C) 2000-2012 Paul Kienzle
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
2 ## Copyright (C) 2003 Alois Schloegl
10055
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
3 ## Copyright (C) 2010 VZLU Prague
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
4 ##
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
5 ## This file is part of Octave.
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
6 ##
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
7 ## Octave is free software; you can redistribute it and/or modify it
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
8 ## 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: 6701
diff changeset
9 ## the Free Software Foundation; either version 3 of the License, or (at
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6701
diff changeset
10 ## your option) any later version.
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
11 ##
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
12 ## Octave is distributed in the hope that it will be useful, but
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
13 ## WITHOUT ANY WARRANTY; without even the implied warranty of
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
14 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
15 ## General Public License for more details.
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
16 ##
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
17 ## 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: 6701
diff changeset
18 ## along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6701
diff changeset
19 ## <http://www.gnu.org/licenses/>.
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
20
5182
5b361aa47dff [project @ 2005-03-03 06:21:47 by jwe]
jwe
parents: 5181
diff changeset
21 ## -*- texinfo -*-
12933
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
22 ## @deftypefn {Function File} {} strmatch (@var{s}, @var{A})
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
23 ## @deftypefnx {Function File} {} strmatch (@var{s}, @var{A}, "exact")
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
24 ## Return indices of entries of @var{A} which begin with the string @var{s}.
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
25 ## The second argument @var{A} must be a string, character matrix, or a cell
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
26 ## array of strings. If the third argument @code{"exact"} is not given, then
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 11354
diff changeset
27 ## @var{s} only needs to match @var{A} up to the length of @var{s}.
12937
1eebae7ac5d2 strmatch.m: Trim search pattern of spaces and nulls.
Rik <octave@nomad.inbox5.com>
parents: 12933
diff changeset
28 ## Trailing spaces and nulls in @var{s} and @var{A} are ignored when matching.
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12973
diff changeset
29 ##
8442
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
30 ## For example:
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
31 ##
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
32 ## @example
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
33 ## @group
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
34 ## strmatch ("apple", "apple juice")
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
35 ## @result{} 1
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
36 ##
12933
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
37 ## strmatch ("apple", ["apple "; "apple juice"; "an apple"])
8442
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
38 ## @result{} [1; 2]
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
39 ##
12933
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
40 ## strmatch ("apple", ["apple "; "apple juice"; "an apple"], "exact")
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
41 ## @result{} [1]
8442
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
42 ## @end group
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
43 ## @end example
12933
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
44 ##
12973
b80b18f537ca doc: Correct various Texinfo warnings about incorrect use of macros.
Rik <octave@nomad.inbox5.com>
parents: 12937
diff changeset
45 ## @strong{Caution:} @code{strmatch} is scheduled for deprecation. Use
14215
103ec2ea6914 doc: Mention correct replacements for to-be-deprecated strmatch.m
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
46 ## @code{strncmp} (normal case), or @code{strcmp} ("exact" case), or
103ec2ea6914 doc: Mention correct replacements for to-be-deprecated strmatch.m
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
47 ## @code{regexp} in all new code.
8442
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
48 ## @seealso{strfind, findstr, strcmp, strncmp, strcmpi, strncmpi, find}
5182
5b361aa47dff [project @ 2005-03-03 06:21:47 by jwe]
jwe
parents: 5181
diff changeset
49 ## @end deftypefn
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
50
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
51 ## Author: Paul Kienzle, Alois Schloegl
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
52 ## Adapted-by: jwe
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
53
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
54 function idx = strmatch (s, A, exact)
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
55
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
56 if (nargin < 2 || nargin > 3)
6046
34f96dd5441b [project @ 2006-10-10 16:10:25 by jwe]
jwe
parents: 5307
diff changeset
57 print_usage ();
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
58 endif
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
59
12933
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
60 if (! ischar (s) || (! isempty (s) && ! isvector (s)))
11472
1740012184f9 Use uppercase for variable names in error() strings to match Info documentation. Only m-files done.
Rik <octave@nomad.inbox5.com>
parents: 11469
diff changeset
61 error ("strmatch: S must be a string");
12933
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
62 elseif (! (ischar (A) || iscellstr (A)))
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
63 error ("strmatch: A must be a string or cell array of strings");
10055
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
64 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
65
12937
1eebae7ac5d2 strmatch.m: Trim search pattern of spaces and nulls.
Rik <octave@nomad.inbox5.com>
parents: 12933
diff changeset
66 ## Trim blanks and nulls from search string
1eebae7ac5d2 strmatch.m: Trim search pattern of spaces and nulls.
Rik <octave@nomad.inbox5.com>
parents: 12933
diff changeset
67 s = regexprep (s, "[ \\0]+$", '');
10055
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
68 len = length (s);
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
69
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
70 exact = nargin == 3 && ischar (exact) && strcmp (exact, "exact");
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
71
12933
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
72 if (ischar (A))
10055
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
73 [nr, nc] = size (A);
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
74 if (len > nc)
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
75 idx = [];
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
76 else
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
77 match = all (bsxfun (@eq, A(:,1:len), s), 2);
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
78 if (exact)
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
79 AA = A(:,len+1:nc);
12933
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
80 match &= all (AA == " " | AA == "\0", 2);
10055
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
81 endif
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
82 idx = find (match);
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
83 endif
10055
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
84 else
12933
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
85 if (len > 0)
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
86 idx = find (strncmp (s, A, len));
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
87 else
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
88 idx = find (strcmp (s, A));
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
89 endif
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
90 if (exact)
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
91 ## We can't just use strcmp, because we need to ignore spaces at end.
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
92 B = regexprep (A(idx), "[ \\0]+$", '');
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
93 idx = idx(strcmp (s, B));
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
94 endif
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
95 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
96
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
97 endfunction
8442
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7017
diff changeset
98
10055
38600f8cba83 optimize strmatch
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
99
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
100 %!assert (strmatch ("a", {"aaa", "bab", "bbb"}), 1)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
101 %!assert (strmatch ("apple", "apple juice"), 1)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
102 %!assert (strmatch ("apple", ["apple pie"; "apple juice"; "an apple"]), [1; 2])
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
103 %!assert (strmatch ("apple", {"apple pie"; "apple juice"; "tomato"}), [1; 2])
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
104 %!assert (strmatch ("apple pie", "apple"), [])
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
105 %!assert (strmatch ("a ", "a"), 1)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
106 %!assert (strmatch ("a", "a \0", "exact"), 1)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
107 %!assert (strmatch ("a b", {"a b", "a c", "c d"}), 1)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
108 %!assert (strmatch ("", {"", "foo", "bar", ""}), [1, 4])
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
109 %!assert (strmatch ('', { '', '% comment', 'var a = 5', ''}, 'exact'), [1,4])
12933
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
110
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
111 %% Test input validation
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
112 %!error <Invalid call to strmatch> strmatch ()
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
113 %!error <Invalid call to strmatch> strmatch ("a")
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
114 %!error <Invalid call to strmatch> strmatch ("a", "aaa", "exact", 1)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
115 %!error <S must be a string> strmatch (1, "aaa")
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
116 %!error <S must be a string> strmatch (char ("a", "bb"), "aaa")
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
117 %!error <A must be a string> strmatch ("a", 1)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14215
diff changeset
118 %!error <A must be a string> strmatch ("a", {"hello", [1]})
12933
a499469b05a4 strmatch.m: Revamp function for better speed and Matlab compatibility.
Rik <octave@nomad.inbox5.com>
parents: 12931
diff changeset
119