Erlang World


top > data type > string

String

文字の扱い

Erlang内部での文字の扱いは単なる整数型(ASCIIコード)の値です。 ASCIIコードは「0〜255」までの整数です。
$ 」を使うことによって、文字に割り当てられている値を得ることができます。

> $A.
65

ASCII文字コード表で確認すると、確かに「A」の文字コードは「65」となっているようです。

このようにErlangにおいては文字をアルファベットを専門とするアスキーコードで扱うため、 日本語に関する言語処理を行なうことは非常に難しいかもしれません。
そもそもErlangはテキスト処理を得意としている言語ではないので、もし柔軟なが機能必要なのであれば、 他の言語と組み合わせて使用するのが良いかもしれません。

文字列としてのList

Erlangの文字列は「文字のリスト」として扱われています。

Erlangの文字は整数型の値でした。
したがって、文字列は「整数型(0〜255)のリスト」であると言えます。

少し実験をしてみます。

文字列は二重引用符(")で囲むことによって表現します。

> String = "Hello".
"Hello"

変数Stringに文字列が格納されています。

次に、文字列が「文字のリスト」であるということを確認してみます。

String2 = [$H,$e,$l,$l,$o].
"Hello"

確かに文字のリストは文字列として扱われていますね。

また、「文字は整数型」でした。したがって、各文字をアスキーコードに直してリストに入れてみます。

String3 = [72,101,108,108,111].
"Hello"

きちんと文字列として扱われていますね。

標準出力

次に標準出力について扱います。出力については、BIFのioモジュールにある関数が良く利用されます。

その中でも最も良く使われるのは、 io:format でしょう。

これはCでいうprintfや、JavaでいうSystem.out.printにあたります。

io:format("hello~n").
hello
ok

これは引数を出力する関数です。文字列の最後にある ~n は改行です。

出力されているのは2行ですが、1行目が関数により出力された結果で、2行目は関数の返り値となっています。

次に引数が2つあるio:formatを見ましょう。

> io:format("hello ~p~n",[erlang]).
hello erlang
ok

> Month = 5.   
5
> Day = 3.
3
> io:format("my birthday is ~p/~p~n",[Month,Day]).
my birthday is 5/3
ok

io:format/2の第一引数に出力する文字列、第二引数にリストを指定します。リストの中には文字列の中に埋め込みたい値を格納します。

~p で指定された場所にリスト内の値が埋め込まれているのがわかりますね。

~nや~pはio:formatやio:fwrite関数の中で使えるコントロールシーケンスです。上の例のように第二引数のリスト内の要素を出力したりする際に使われます。

主要なものを記します。その他についてはここをご参照願います。ioマニュアル

シーケンス役割
~n改行
~p整形して出力を行なう
~s文字列の出力を行なう
~wデータをそのまま出力する
> String = "Erlang".
"Erlang"

> io:format("word ~s~n",[String]).
word Erlang
ok

> io:format("word ~w~n",[String]).
word [69,114,108,97,110,103]
ok

> io:format("word ~p~n",[String]).
word "Erlang"

特に書式を意識しないのであれば、 ~p を使うのが良いと思います。 この関数はデバッグの際に気になる部分に加えることで、実行処理を確かめるのに役立ってくれます。

BIF string **完成したら別ページにします。

文字列処理によく利用されるBIFはstringモジュールです。リファレンスとして良く利用される関数をまとめます。

len(String) -> Length
String = string()
Length = integer()
equal(String1, String2) -> bool()
String1 = String2 = string()
concat(String1, String2) -> String3
String1 = String2 = String3 = string()
chr(String, Character) -> Index
rchr(String, Character) -> Index
String = string()
Character = char()
Index = integer()
str(String, SubString) -> Index
rstr(String, SubString) -> Index
String = SubString = string()
Index = integer()
span(String, Chars) -> Length
cspan(String, Chars) -> Length
String = Chars = string()
Length = integer()
substr(String, Start) -> SubString
substr(String, Start, Length) -> Substring
String = SubString = string()
Start = Length = integer()
join(StringList, Separator) -> String
StringList = [string()]
Separator = string()
chars(Character, Number) -> String
chars(Character, Number, Tail) -> String
Character = char()
Number = integer()
String = string()
copies(String, Number) -> Copies
String = Copies = string()
Number = integer()
words(String) -> Count
words(String, Character) -> Count
String = string()
Character = char()
Count = integer()
sub_word(String, Number) -> Word
sub_word(String, Number, Character) -> Word
String = Word = string()
Character = char()
Number = integer()
strip(String) -> Stripped
strip(String, Direction) -> Stripped
strip(String, Direction, Character) -> Stripped
String = Stripped = string()
Direction = left | right | both
Character = char()
left(String, Number) -> Left
left(String, Number, Character) -> Left
String = Left = string()
Character = char
Number = integer()
right(String, Number) -> Right
right(String, Number, Character) -> Right
String = Right = string()
Character = char
Number = integer()
centre(String, Number) -> Centered
centre(String, Number, Character) -> Centered
String = Centered = string()
Character = char
Number = integer()
sub_string(String, Start) -> SubString
sub_string(String, Start, Stop) -> SubString
String = SubString = string()
Start = Stop = integer()
to_float(String) -> {Float,Rest} | {error,Reason}
String = string()
Float = float()
Rest = string()
Reason = no_float | not_a_list
to_integer(String) -> {Int,Rest} | {error,Reason}
String = string()
Int = integer()
Rest = string()
Reason = no_integer | not_a_list
to_lower(String) -> Result
to_lower(Char) -> CharResult
to_upper(String) -> Result
to_upper(Char) -> CharResult
String = Result = string()
Char = CharResult = integer()

Yuichi ITO. All rights reserved.
mail to : ad
inserted by FC2 system