<div dir="ltr">I think the desire to convert the binary to lists is a bit questionable in the first place. Also, if it is text, binary_to_list/1 is probably the wrong way to do it, since it will be a list of bytes in some encoding and not unicode code points. unicode:characters_to_list/1 might be more appropriate, but without any context it's hard to give good suggestions.</div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Sep 24, 2013 at 12:46 PM, Adrian Roe <span dir="ltr"><<a href="mailto:roe.adrian@gmail.com" target="_blank">roe.adrian@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
                <div>
                    Initial message failed - retrying 
                </div>
                <div><div><br></div><div>-- </div><div>Adrian Roe</div><div>Sent with <a href="http://www.sparrowmailapp.com/?sig" target="_blank">Sparrow</a></div><div><br></div></div>
                 
                <p style="color:#a0a0a8">Forwarded message:</p>
                <blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px">
                    <div>
                         
                        <b>From:</b> Adrian Roe <<a href="mailto:roe.adrian@gmail.com" target="_blank">roe.adrian@gmail.com</a>><br>
                         
                         
                         
                        <b>To:</b> <a href="mailto:jasingleton.work@gmail.com" target="_blank">jasingleton.work@gmail.com</a><br>
                         
                         
                        <b>Cc:</b> <a href="mailto:erlang-programming@googlegroups.com" target="_blank">erlang-programming@googlegroups.com</a><br>
                         
                        <b>Date:</b> Tuesday, 24 September 2013 20:44:41<br>
                        <b>Subject:</b> Re: [erlang-questions] Erlang n00b figuring out bins<br>
                    </div>
                     
                    <br>
                     
                    <div><div><div>
                <div>
                    The first thing I'd say is to ask why you want a list of strings (lists) - I initially went down the strings are lists route but am definitely in the strings as binaries camp now, as are an increasing number of Erlang projects.  Definitely a question of style, but the style du jour appears to be binaries. Also the example you give doesn't run for me (as I'd expect) - <font face="Courier">binary_to_list( [<<"s">>, <<"t">>, <<"u">>, <<"f">>, <<"f">>])</font> is trying to convert a list of binaries rather than a binary which is what it expects</div>
<div><br></div><div><div><font face="Courier">Eshell V5.10.1  (abort with ^G)</font></div><div><font face="Courier">1> binary_to_list( [<<"s">>, <<"t">>, <<"u">>, <<"f">>, <<"f">>]).</font></div>
<div><font face="Courier">** exception error: bad argument</font></div><div><font face="Courier">     in function  binary_to_list/1</font></div><div><font face="Courier">        called as binary_to_list([<<"s">>,<<"t">>,<<"u">>,<<"f">>,<<"f">>])</font></div>
</div><div><br></div><div>That aside there are two jobs going on there:</div><div><ul><li>You need to split the input on "."</li><li>You want the output as a list of strings (= list of lists)</li></ul><div>You can go about that in (at least) two different ways</div>
</div>
                <div><div><ul><li>Split the binary and convert the binary parts into strings</li><li>Convert the input to a list and split it</li></ul><div>Thankfully there are library calls that do just what you need.  Lets look at splitting then converting - binary:split/2 looks like it does the job</div>
<div><font face="Courier"><br></font></div><div><div><font face="Courier">Eshell V5.10.1  (abort with ^G)</font></div><div><font face="Courier">1> X = <<"stuff.junk.excess">>.</font></div><div><font face="Courier"><<"stuff.junk.excess">></font></div>
<div><font face="Courier">2> binary:split(X, [<<".">>]).</font></div><div><font face="Courier">[<<"stuff">>,<<"junk.excess">>]</font></div></div><div><br>
</div><div>Close, but not quite what we want as it has only split on the first occurrence.  Thankfully there's binary:split/3 which gives us a little more control</div><div><font face="Courier"><br></font></div><div><div>
<font face="Courier">3> binary:split(X, [<<".">>], [global]).</font></div><div><font face="Courier">[<<"stuff">>,<<"junk">>,<<"excess">>]</font></div>
</div><div><br></div><div>Perfect - now we just need to convert the binary strings into lists.  Maybe something like</div><div><br></div><div><div><font face="Courier">4> [binary_to_list(Y) || Y <- binary:split(X, [<<".">>], [global])].</font></div>
<div class="im"><div><font face="Courier">["stuff","junk","excess"]</font></div></div></div><div><br></div><div>Again with the other approach (convert then split), there's a function that does what we need - string:tokens/2.  This expects a string (aka list) as input</div>
<div><br></div><div><div><font face="Courier">5> string:tokens(binary_to_list(X), ".").</font></div><div class="im"><div><font face="Courier">["stuff","junk","excess"]</font></div>
</div></div><div><br></div><div>Not sure if any of that counts as "more graceful" but more widely you should definitely stick with it - Erlang is certainly worth the initial head-scratching.</div><div><br></div>
<div>Adrian</div><div>-- </div></div><div>Dr Adrian Roe</div><div>Sent with <a href="http://www.sparrowmailapp.com/?sig" target="_blank">Sparrow</a></div><div><br></div></div><div><div class="h5">
                  
                <p style="color:#a0a0a8">On Tuesday, 24 September 2013 at 15:46, <a href="mailto:jasingleton.work@gmail.com" target="_blank">jasingleton.work@gmail.com</a> wrote:</p></div></div><blockquote type="cite"><div>

                    <span><div><div><div class="h5"><div><div dir="ltr">I've done a lot of development, but it's been quite a while since I've done anything<br>functional.  Erlang is still brand-new for me, so be warned. <br>
<br>I've got a (conceptual) string arriving in my sw as a binary, e.g. <<"stuff.junk.excess">><br>and trying to transform it into a list of strings, e.g. ["stuff", "junk", "excess"]<br>
The mechanism I'm using is giving me a list of lists of binaries, e.g.<br> [ [<<"s">>, <<"t">>, <<"u">>, <<"f">>, <<"f">>], [<<"j">>, <<"u">>   (etc)<br>
<br>I ended up hacking it to just take each of the lists of binaries and run it through<br>list_to_binary and then binary to list.  The result is what I really wanted, which is <br>    list_to_binary(binary_to_list( [<<"s">>, <<"t">>, <<"u">>, <<"f">>, <<"f">>]))<br>
gives me back<br>    "stuff"<br><br>That's all well and good, and functional, but has two problems:<br>1) I honestly don't get why it worked; I would expect those two operations to<br>    give me back something unchanged.<br>
2) There's got to be a more graceful way to achieve this.<br><br>Thoughts?<br><br><br><br></div></div></div></div><div><div>_______________________________________________</div><div>erlang-questions mailing list</div>
<div><a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a></div><div><a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a></div>
</div></div></span>
                  
                  
                  
                  
                </div></blockquote><div>
                    <br>
                </div>
            </div></div></div>
                </blockquote>
                 
                <div>
                    <br>
                </div>
            <br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>