2012-09-20 5 views
2

Я пытаюсь преобразовать строку в список целых чисел.Преобразование строки в список целых чисел в Erlang

String = "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08". 

Но

lists:map(fun(X) -> string:to_integer(X) end, string:tokens(String, " ")). 

только дает мне ...

[{8,[]}, {2,[]}, {22,[]}, {97,[]}, ... , {91,[]}, {8,[]}] 

Может кто-то, возможно, скажите мне, что хороший/хороший способ будет получить?

[8,2,22,97...91,8] 

(Или мне нужно сделать вспомогательную функцию?)

ответ

8

Это работает:

String = "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08". 
lists:map(fun(X) -> {Int, _} = string:to_integer(X), 
        Int end, 
      string:tokens(String, " ")). 

> [8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8] 

See, string:to_integer возвращает не одно целое, но кортеж:

to_integer(String) -> {Int,Rest} | {error,Reason} 

... поэтому вам нужно извлечь первый элемент из этого кортежа, чтобы получить фактическое число.

+0

Я прочитал руководство, но не понял, что это возможно. Спасибо. – marcus

3

Кроме того, вы можете использовать список генератора синтаксис:

[begin {Int,_}=string:to_integer(Token), Int end|| Token<-string:tokens(String," ")].

Из оболочки:

1> String = "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08". 
"08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08" 
2> 
2> [begin {Int,_}=string:to_integer(Token), Int end|| Token<-string:tokens(String," ")]. 
[8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8] 
0

[list_to_integer (X) || X < -string: токены (String, "")].

Смежные вопросы