March 24, 2006 std.string.strip(char[] str. char delimiters[]) - possible addition? | ||||
---|---|---|---|---|
| ||||
I needed to strip quote's from a string, and thought this may be a useful addition to std.string (kind of follow's PHP trim() API http://www.php.net/trim) Regards Alan char[] stripl(char[] s, char[] c) { uint i; for (i = 0; i < s.length; i++) { bool found = false; for(uint ii =0;ii < c.length; ii++) { if (c[ii] == s[i]) { found = true; break; } } if (!found) break; } return s[i .. s.length]; } char[] stripr(char[] s, char[] c) /// ditto { uint i; for (i = s.length ; i > 0; i--) { bool found = false; for(uint ii =0;ii < c.length; ii++) { if (c[ii] == s[i-1]) { found = true; break; } } if (!found) break; } return s[0 .. i]; } char[] strip(char[] s, char[] c) /// ditto { return stripr(stripl(s,c),c); } |
March 24, 2006 Re: std.string.strip(char[] str. char delimiters[]) - possible addition? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alan Knowles | On Fri, 24 Mar 2006 11:57:57 +0800, Alan Knowles wrote: > I needed to strip quote's from a string, and thought this may be a useful addition to std.string > > (kind of follow's PHP trim() API http://www.php.net/trim) > > Regards > Alan > > char[] stripl(char[] s, char[] c) > { > uint i; > > for (i = 0; i < s.length; i++) > { > bool found = false; > for(uint ii =0;ii < c.length; ii++) { > if (c[ii] == s[i]) { > found = true; > break; > } > } > if (!found) > break; > } > return s[i .. s.length]; > } > > char[] stripr(char[] s, char[] c) /// ditto > { > uint i; > > for (i = s.length ; i > 0; i--) > { > bool found = false; > > for(uint ii =0;ii < c.length; ii++) { > > > if (c[ii] == s[i-1]) { > found = true; > break; > } > } > if (!found) > break; > } > return s[0 .. i]; > } > > char[] strip(char[] s, char[] c) /// ditto > { > return stripr(stripl(s,c),c); > } > Couldn't resist "D-ifying" these functions ... hope you don't mind. char[] stripl(char[] s, char[] c) out (result) { assert(result.length <= s.length); } body { if (s.length == 0 || c.length == 0) return s; foreach(int i, char target; s) { foreach(char delim; c) { if (delim == target) return s[i+1..$]; } } return s; } char[] stripr(char[] s, char[] c) out (result) { assert(result.length <= s.length); } body { if (s.length == 0 || c.length == 0) return s; for(int i = s.length-1; i >= 0; i--) { foreach(char delim; c) { if (delim == s[i]) return s[0..i]; } } return s; } char[] strip(char[] s, char[] c) out (result) { assert(result.length <= s.length); } body { if (s.length == 0 || c.length == 0) return s; foreach(int i, char target; s) { foreach(int j, char delim; c) { if (delim == target) // strip off matching delimiter from right. return stripr(s[i+1..$], c[j..j+1]); } } return s; } unittest { assert(stripl(" 'abc' ", "'") == "abc' "); assert(stripr(" 'abc' ", "'") == " 'abc"); assert(strip (" 'abc' ", "'") == "abc"); assert(stripl(" 'abc' ", "'`") == "abc' "); assert(stripr(" 'abc' ", "'`") == " 'abc"); assert(strip (" 'abc' ", "'`") == "abc"); assert(stripl(" `'abc'` ", "'`") == "'abc'` "); assert(stripr(" `'abc'` ", "'`") == " `'abc'"); assert(strip (" `'abc'` ", "'`") == "'abc'"); assert(stripl(" '`abc`' ", "'`") == "`abc`' "); assert(stripr(" '`abc`' ", "'`") == " '`abc`"); assert(strip (" '`abc`' ", "'`") == "`abc`"); assert(stripl(" '`abc`' ", ",") == " '`abc`' "); assert(stripr(" '`abc`' ", ",") == " '`abc`' "); assert(strip (" '`abc`' ", ",") == " '`abc`' "); assert(stripl(" '`abc`' ", "") == " '`abc`' "); assert(stripr(" '`abc`' ", "") == " '`abc`' "); assert(strip (" '`abc`' ", "") == " '`abc`' "); assert(stripl("", ",") == ""); assert(stripr("", ",") == ""); assert(strip ("", ",") == ""); assert(stripl(" '`abc'` ", "'`") == "`abc'` "); assert(stripr(" '`abc'` ", "'`") == " '`abc'"); assert(strip (" '`abc'` ", "'`") == "`abc"); } -- Derek (skype: derek.j.parnell) Melbourne, Australia "Down with mediocracy!" 24/03/2006 3:56:41 PM |
Copyright © 1999-2021 by the D Language Foundation