簡體   English   中英

ERLANG - 將列表拆分為子列表

[英]ERLANG - Splitting Lists into sub list

嗨,這是我的第一篇文章,希望大家都好。 所以我剛剛開始erlang,我遇到了一個問題,我不確定如何解決。

所以我有一個我正在接受的二進制文件

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

我的目標是根據01將其拆分為子列表(如果效率更高,則為二進制)。

例如,上面應該看起來像:

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

-要么-

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

01是分隔標記,不需要包含在最終輸出中。

我嘗試過這樣的事情:(如果有更好的方法,請不要理會)

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.

這根本不是很干凈,根本不像專業人士的寫作。 我確定當有人告訴我時,我會打我的頭“呃”。

我意識到肯定有不止一個解決方案,但最好的解決方案是什么。 似乎ERL有很多BIF和做事的方式,我想要找到自己的方式。

謝謝你們的幫助-B

與R14A一起,Erlang現在包含一個binary模塊來處理這樣的任務:

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">>]

請注意,雖然看起來不對( <<"6CW-5">><<"\\"8N">> ),但基礎表示是正確的,字符串是試圖弄清楚如何打印出二進制文件的VM。以原始格式輸出時看到相同的調用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM