String Case
From Erlang Community
(Difference between revisions)
| Revision as of 21:51, 3 September 2006 (edit) Bfulgham (Talk | contribs) ← Previous diff |
Revision as of 09:17, 25 September 2006 (edit) (undo) Ayrnieu (Talk | contribs) (remove httpd_util use (does this even work? I don't have this module); replace with simple ASCII solution and advice on beyond-ASCII) Next diff → |
||
| Line 3: | Line 3: | ||
| == Solution == | == Solution == | ||
| - | + | For ASCII, you can do it yourself in this simple manner: | |
| - | <code> | + | <code> |
| - | + | to_upper(S) -> lists:map(fun char_to_upper/1, S). | |
| - | + | to_lower(S) -> lists:map(fun char_to_lower/1, S). | |
| - | + | char_to_upper(C) when C >= $a, C =< $z -> C bxor $\s; | |
| - | + | char_to_upper(C) -> C. | |
| + | char_to_lower(C) when C >= $A, C =< $Z -> C bxor $\s; | ||
| + | char_to_lower(C) -> C. | ||
| </code> | </code> | ||
| - | |||
| - | The httpd_util module contains a dog's breakfast of functionality that probably belong in other modules, but that have not been added due to backwards-compatibility concerns. | ||
| + | For many other languages where case-change makes sense, you can extend the above in a simple manner by adding new ranges or specific characters to the char_to_*/1 functions. For some, you may need extra processing in to_upper/1 or to_lower/1. | ||
| + | |||
| + | Erlang doesn't have a nice unicode-respectful way of doing this. If you'd like to prototype such a way, you might start with: | ||
| + | |||
| + | <code> | ||
| + | -module(unicode). | ||
| + | |||
| + | -record(unicode_string,{encoding,language,data}). | ||
| + | </code> | ||
| [[Category:CookBook]][[Category:StringRecipes]] | [[Category:CookBook]][[Category:StringRecipes]] | ||
Revision as of 09:17, 25 September 2006
Problem
You need to convert a string to all uppercase or all lowercase.
Solution
For ASCII, you can do it yourself in this simple manner:
to_upper(S) -> lists:map(fun char_to_upper/1, S). to_lower(S) -> lists:map(fun char_to_lower/1, S). char_to_upper(C) when C >= $a, C =< $z -> C bxor $\s; char_to_upper(C) -> C. char_to_lower(C) when C >= $A, C =< $Z -> C bxor $\s; char_to_lower(C) -> C. |
For many other languages where case-change makes sense, you can extend the above in a simple manner by adding new ranges or specific characters to the char_to_*/1 functions. For some, you may need extra processing in to_upper/1 or to_lower/1.
Erlang doesn't have a nice unicode-respectful way of doing this. If you'd like to prototype such a way, you might start with:
-module(unicode).
-record(unicode_string,{encoding,language,data}).
|

Digg It
Del.icio.us
Reddit
Facebook
Stumble Upon
Technorati

