Mercurial > hg > octave-nkf
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 |
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 | 2 ## Copyright (C) 2003 Alois Schloegl |
10055 | 3 ## Copyright (C) 2010 VZLU Prague |
5178 | 4 ## |
5181 | 5 ## This file is part of Octave. |
5178 | 6 ## |
5181 | 7 ## Octave is free software; you can redistribute it and/or modify it |
8 ## under the terms of the GNU General Public License as published by | |
7016 | 9 ## the Free Software Foundation; either version 3 of the License, or (at |
10 ## your option) any later version. | |
5181 | 11 ## |
12 ## Octave is distributed in the hope that it will be useful, but | |
13 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 ## General Public License for more details. | |
5178 | 16 ## |
17 ## You should have received a copy of the GNU General Public License | |
7016 | 18 ## along with Octave; see the file COPYING. If not, see |
19 ## <http://www.gnu.org/licenses/>. | |
5178 | 20 |
5182 | 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 | 49 ## @end deftypefn |
5181 | 50 |
51 ## Author: Paul Kienzle, Alois Schloegl | |
52 ## Adapted-by: jwe | |
53 | |
54 function idx = strmatch (s, A, exact) | |
55 | |
5178 | 56 if (nargin < 2 || nargin > 3) |
6046 | 57 print_usage (); |
5178 | 58 endif |
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 | 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 | 68 len = length (s); |
69 | |
70 exact = nargin == 3 && ischar (exact) && strcmp (exact, "exact"); | |
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 | 73 [nr, nc] = size (A); |
74 if (len > nc) | |
75 idx = []; | |
76 else | |
77 match = all (bsxfun (@eq, A(:,1:len), s), 2); | |
78 if (exact) | |
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 | 81 endif |
82 idx = find (match); | |
5181 | 83 endif |
10055 | 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 | 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 | 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 |