2010-08-12 6 views
3

Salut c'est mon premier post ici j'espère que vous allez tous bien. Donc je commence juste erlang et j'ai couru dans un problème je ne sais pas encore comment aborder.ERLANG - Fractionner les listes dans la sous-liste

J'ai donc un binaire je RECEVOIR sous forme de

<<56, 23, 67, 34, 45, 78, 01, 54, 67, 87, 45, 53, 01, 34, 56, 78>> 

Mon but est de le diviser en fonction de la 01.

liste des sous (ou binaire si plus efficace) pour exemple ci-dessus devrait venir ressembler à:

<<56, 23, 67, 34, 45, 78>> <<54, 67, 87, 45, 53>> <<34, 56, 78>> 

-ou-

[[56, 23, 67, 34, 45, 78], [54, 67, 87, 45, 53], [34, 56, 78]] 

Le 01 est le tag de séparation, il n'a pas besoin d'être inclus dans la sortie finale.

J'ai essayé quelque chose en tant que tel: (ne pas tenir compte s'il S'IL VOUS PLAÎT une meilleure façon)

parse1([]) -> []; 
parse1(1) -> io:format("SOHSOHSOHSOHSOHSSOHSOHS"); 
parse1(Reply) -> parse1({Reply, []}); 
parse1({Reply, nxtParse}) -> 
    [H | T] = Reply, 
    case H of 
     _ when H > 1 -> 
      [H | nxtParse], 
       io:format("Reply 1 = ~p~n", [H]), 
      parse1({T, nxtParse}); 
     _ when H == 1 -> 
      io:format("SOHSOHSOHSOHSOHSSOHSOHS"); 

     [] -> 
      ok 

    end. 

Ce n'est pas vraiment du tout propre et ne ressemble pas du tout écrire de ce pro. Je suis sûr que je claque ma tête "duh" quand quelqu'un me demande.

Je me rends compte qu'il y a certainement plus d'une solution, mais quel est le meilleur. Il semble que ERL a tellement de BIFs et beaucoup de choses à faire, je dois juste trouver mon chemin.

Merci pour l'aide les gars -B

Répondre

8

à venir avec R14a, Erlang comprend maintenant un module binary pour gérer ces tâches:

1> Bin = <<56, 23, 67, 34, 45, 78, 01, 54, 67, 87, 45, 53, 01, 34, 56, 78>>. 
<<56,23,67,34,45,78,1,54,67,87,45,53,1,34,56,78>> 
2> binary:split(Bin, <<01>>, [global]). 
[<<56,23,67,34,45,78>>,<<"6CW-5">>,<<"\"8N">>] 

Notez que bien qu'il semble erroné (<<"6CW-5">> et <<"\"8N">>), la représentation sous-jacente est correcte et les chaînes sont la VM essayant de comprendre comment imprimer les binaires. Voir le même appel lors de la sortie dans un format brut:

3> io:format("~w~n", [binary:split(Bin, <<01>>, [global])]). 
[<<56,23,67,34,45,78>>,<<54,67,87,45,53>>,<<34,56,78>>] 
ok 
+1

+1 J'aime Erlang –

+0

Merci beaucoup! – BAR

Questions connexes