2014-02-04 5 views
1

Как преобразовать этот формат строки "{hari, localost}" в это: {"hari", "localost"}, в Erlang?Преобразование Erlang для одного формата в другой формат

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

+2

Что о 'list_to_tuple (строка: лексемы («{Хари, localost}»," {,} ")).'? – raina77ow

+0

благодарит его рабочий тон –

+0

Ну, да, но он очень подвержен ошибкам. Я бы предложил проверить «erl_scan: string» (вместо этого не нужно делать это на работе). – raina77ow

ответ

0

Я думаю, вам нужно конвертировать из строки, так что вы можете использовать модули erl_scan и erl_parse:

1> erl_scan:string("{hari, localost}"++"."). 
{ok,[{'{',1}, 
    {atom,1,hari}, 
    {',',1}, 
    {atom,1,localost}, 
    {'}',1}, 
    {dot,1}], 
    1} 
2> {ok,Term} = erl_parse:parse_term(Tokens).    
{ok,{hari,localost}} 
3>Conv = fun({X, Y}) -> {atom_to_list(X), atom_to_list(Y)} end. 
#Fun<erl_eval.6.80484245> 
4> Conv(Term). 
{"hari","localost"} 
5> 

Примечание 1 функция erl_parse: parse_term/1 будет работать, только если условия является допустимым выражением , поэтому мне пришлось добавить «.». в конце ввода.

Примечание 2 лет можно непосредственно преобразовать в окончательном выражении, если процитировать члены в выражении ввода:

1> {ok,Tokens,_} = erl_scan:string("{\"hari\", \"localost\"}.").  
{ok,[{'{',1}, 
    {string,1,"hari"}, 
    {',',1}, 
    {string,1,"localost"}, 
    {'}',1}, 
    {dot,1}], 
    1} 
2> {ok,Term} = erl_parse:parse_term(Tokens).       
{ok,{"hari","localost"}} 
3> 
Смежные вопросы