Mercurial > octave
annotate scripts/strings/erase.m @ 24460:892f7f096ffb
erase.m: New string function for deleting substrings with a string.
* scripts/strings/erase.m: New function.
* scripts/strings/module.mk: Add erase.m to build system.
* NEWS: Announce new function in list for 4.4 release.
* strings.txi: Add erase docstring to manual.
author | Sahil Yadav |
---|---|
date | Mon, 25 Dec 2017 08:33:52 -0800 |
parents | |
children | 42d099b841aa |
rev | line source |
---|---|
24460
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
1 ## Copyright (C) 2017 Sahil Yadav |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
2 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
3 ## This file is part of Octave. |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
4 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
5 ## Octave is free software; you can redistribute it and/or modify it |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
6 ## under the terms of the GNU General Public License as published by |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
7 ## the Free Software Foundation; either version 3 of the License, or |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
8 ## (at your option) any later version. |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
9 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
10 ## Octave is distributed in the hope that it will be useful, but |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
13 ## GNU General Public License for more details. |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
14 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
15 ## You should have received a copy of the GNU General Public License |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
16 ## along with Octave; see the file COPYING. If not, see |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
17 ## <http://www.gnu.org/licenses/>. |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
18 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
19 ## -*- texinfo -*- |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
20 ## @deftypefn {} {@var{newstr} =} erase (@var{str}, @var{ptn}) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
21 ## Delete all occurrences of @var{ptn} within @var{str}. |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
22 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
23 ## @var{str} and @var{ptn} can be ordinary strings, cell array of strings, or |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
24 ## character arrays. |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
25 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
26 ## Examples |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
27 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
28 ## @example |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
29 ## @group |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
30 ## ## string, single pattern |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
31 ## erase ("Hello World!", " World") |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
32 ## @result{} "Hello!" |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
33 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
34 ## ## cellstr, single pattern |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
35 ## erase (@{"Hello", "World!"@}, "World") |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
36 ## @result{} @{"Hello", "!"@} |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
37 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
38 ## ## string, multiple patterns |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
39 ## erase ("The Octave interpreter is fabulous", @{"interpreter ", "The "@}) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
40 ## @result{} "Octave is fabulous" |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
41 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
42 ## ## cellstr, multiple patterns |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
43 ## erase (@{"The ", "Octave interpreter ", "is fabulous"@}, @{"interpreter ", "The "@}) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
44 ## @result{} @{"", "Octave ", "is fabulous"@} |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
45 ## @end group |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
46 ## @end example |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
47 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
48 ## Programming Note: @code{erase} deletes the first instance of a pattern in a |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
49 ## string when there are overlapping occurrences. For example, |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
50 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
51 ## @example |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
52 ## erase ("abababa", "aba") |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
53 ## @result{} "b" |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
54 ## @end example |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
55 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
56 ## See @code{strrep} for processing overlaps. |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
57 ## |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
58 ## @seealso{strrep, regexprep} |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
59 ## @end deftypefn |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
60 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
61 ## Author: Sahil Yadav <yadavsahil5198@gmail.com> |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
62 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
63 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
64 function newstr = erase (str, ptn) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
65 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
66 if (nargin != 2) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
67 print_usage (); |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
68 endif |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
69 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
70 ischarmatrix = false; |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
71 if (ischar (str)) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
72 if (rows (str) > 1) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
73 ## Convert to cell. Can't use cellstr which trims spaces. |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
74 str = mat2cell (str, ones (1, rows (str))); |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
75 ischarmatrix = true; |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
76 endif |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
77 elseif (! iscellstr (str)) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
78 error ("erase: STR must be a string or cell array of strings"); |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
79 endif |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
80 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
81 if (ischar (ptn)) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
82 if (rows (ptn) > 1) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
83 ## Convert to cell. Can't use cellstr which trims spaces. |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
84 ptn = mat2cell (ptn, ones (1, rows (ptn))); |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
85 endif |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
86 elseif (! iscellstr (ptn)) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
87 error ("erase: PTN must be a string or cell array of strings"); |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
88 endif |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
89 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
90 nptn = ifelse (ischar (ptn), 1, numel (ptn)); |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
91 if (nptn == 1) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
92 newstr = strrep (str, ptn, "", "overlaps", false); |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
93 else |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
94 ptn = regexptranslate ("escape", ptn(:).'); |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
95 ptn = strjoin (ptn, '|'); |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
96 newstr = regexprep (str, ptn, ""); |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
97 endif |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
98 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
99 if (ischarmatrix) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
100 newstr = char (newstr); |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
101 endif |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
102 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
103 endfunction |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
104 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
105 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
106 %!assert (erase ("Hello World!", " World"), "Hello!") |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
107 %!assert (erase ({"Hello World!"}, " World"), {"Hello!"}) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
108 %!assert (erase (char ("Hello", "World!"), "World"), char ("Hello ", "!")) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
109 %!assert (erase ({"Hello", "World!"}, "World"), {"Hello", "!"}) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
110 %!assert (erase ("Hello World!", {"o"; "World"; " "}), "Hell!") |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
111 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
112 ## Test overlaps |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
113 ## from https://savannah.gnu.org/bugs/?52647#comment5 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
114 %!assert (erase ('ababa', 'aba'), 'ba') |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
115 %!assert (erase ('abababa', 'aba'), 'b') |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
116 %!assert (erase ('ababababa', 'aba'), 'bba') |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
117 %!assert (erase ('ababababa', {'aba', 'bba'}), 'bba') |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
118 %!assert (erase ('ababababa ', {'aba', 'bba'}), 'bba ') |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
119 %!assert (erase ({' ababababa '}, {'aba', 'bba'}), {' bba '}) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
120 %!assert (erase (' ababa ', {'aba', 'baba'}), ' ba ') |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
121 %!assert (erase (' Hello World t ', {'t';'llo'}), ' He World ') |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
122 %!assert (erase ({' Hello World t '}, [ 'o ']), {' HellWorld t '}) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
123 %!assert (erase ( 'Hello World t ', {'ld '; 'o '}), 'HellWort ') |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
124 %!assert (erase ('aba', 'aba'), '') |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
125 %!assert (erase ({'aba'}, 'aba'), ({""})) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
126 %!assert (erase ('', 'aba'), '') |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
127 %!assert (erase ({'abbabbabba'},{'abba'}), {'bb'}) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
128 %!assert (erase ({'ababababa';'abbabbabba'}, 'aba'), {'bba';'abbabbabba'}) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
129 %!assert (erase ({''}, {''}), {''}) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
130 %!assert (erase ({'pppppppp'}, 'p'), {''}) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
131 %!assert (erase ('Hello World t ', {'ld '; 'o '}), 'HellWort ') |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
132 %!assert (erase ({'Hello World t '}, {'ld '; 'o '}), {'HellWort '}) |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
133 |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
134 ## Test input validation |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
135 %!error erase () |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
136 %!error erase ("a") |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
137 %!error erase ("a", "b", "c") |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
138 %!error <STR must be a string> erase ([1], "foo") |
892f7f096ffb
erase.m: New string function for deleting substrings with a string.
Sahil Yadav
parents:
diff
changeset
|
139 %!error <PTN must be a string> erase ("foo", [1]) |