2010-08-12 3 views
1

Так что у меня только одна проблема была решена очень быстро у хорошего парня на моем другом посту.ERlANG - Разделение списков в подписок

ERLANG - Splitting Lists into sub list

Теперь я новичок в Erlang и нужна помощь с синтаксисом другой функции, которая делает работу по результату из моего предыдущего поста.

К примеру, у меня теперь есть:

Reply = [<<56,45,34,07,45,67,34>>, <<12,23,56,07,67,67>>, <<55,23,45,07,89,56>>] 

И мне нужно разбить его дальше:

[ [<<56,45,34>>,<<45,67,34>>], [<<12,23,56>>,<<67,67>>] , [<<55,23,45>>, <<89,56>>] ] 

Разделитель в этом примере < < 07 >>

Этом код процесса двоичный

parse(Reply) -> binary:split(Reply, <<07>>, [global]). 

Но теперь, как я могу рекурсивно пройти через массив и сделать это снова.

Вот пример моего текущего кода:

parse(Reply) -> binary:split(Reply, <<01>>, [global]). 
parse2(Reply) -> binary:split(Reply, <<07>>, [global]). 

func1(Done) -> [parse2(X) || X <- Done]. 

%%blah blah - get to the executing functions code 
Done = parse(Reply), 
Done1 = func1(Done), 

Я знаю, что это должно быть что-то супер просто последний уверен был я.

Бест, -B

ответ

1

Используйте списковый применить функцию к каждому элементу списка. Эта функция почти так же, как и для последнего вопроса:

1> L = [<<56,45,34,07,45,67,34>>, <<12,23,56,07,67,67>>, <<55,23,45,07,89,56>>]. 
[<<56,45,34,7,45,67,34>>, 
<<12,23,56,7,67,67>>, 
<<55,23,45,7,89,56>>] 
2> [binary:split(X, <<07>>, [global]) || X <- L]. 
[[<<"8-\"">>,<<"-C\"">>], 
[<<12,23,56>>,<<"CC">>], 
[<<55,23,45>>,<<"Y8">>]] 
3> io:format("~w~n",[[binary:split(X, <<07>>, [global]) || X <- L]]). 
[[<<56,45,34>>,<<45,67,34>>],[<<12,23,56>>,<<67,67>>],[<<55,23,45>>,<<89,56>>]] 
ok 

Другой вариант заключается в использовании списков: карта/2:

4> lists:map(fun(X) -> binary:split(X, <<07>>, [global]) end, L). 
[[<<"8-\"">>,<<"-C\"">>], 
[<<12,23,56>>,<<"CC">>], 
[<<55,23,45>>,<<"Y8">>]] 
0

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

parse(Reply) -> binary:split(Reply, <<01>>, [global]). 
parse2(<<>>) -> <<>>; 
parse2(Reply) -> binary:split(Reply, <<"=">>, [global]). 

func2([H|T], Result) -> 
    H1 = parse2(H), 
    func2(T, [H1|Result]); 
func2([], Result) -> io:format("Reply 1 = ~p~n", [Result]), Result. 


Done = parse(Reply), 

Done1 = func2(Done, []), 

-B

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