cuspy memo


ただ trim したいだけなのに・・・

2007/09/14 Friday 02:12:30

Common Lisp だったら string-trim, Java だったら String#trim(), perl は chop(), PHP でも trim().
Erlang で バイナリの最後の “\r\n” を取り除きたいのだけど効率の良い方法が思いつかない。要は

> trim(<<"hello\\r\\n">>).
<<"hello">>

となる関数 trim() を定義したい。とりあえず思いついたのは、

1) 文字列にして string:left() を使う。

trim1(Bin) ->
    string:left(binary_to_list(Bin), size(Bin) - 2).

2) 文字列にして string:tokens() を使う。

trim2(Bin) ->
    [Ret|_] = string:tokens(binary_to_list(Bin), "\\r\\n"),
    Ret.

3) 文字列にして 2回 string:strip() する。

trim3(Bin) ->
    string:strip(string:strip(binary_to_list(Bin), right, $\\n), right, $\\r).

というように一度文字列にする方法しか思いつかなかったんだけど、同じ所で悩んでた人発見。

http://easyerl.blogspot.com/2007/06/shrink-binary-octet-stream-easily.html

trim4(Bin) ->
    Size = size(Bin) - 2,
    <<Bin:Size/binary-unit:8>>.

なるほど、これが bit syntaxか。
効率は良さそうだけど <<”hello\r\n\r\n”>>
を削りたいときにはやっぱり困るなぁ。

  1. Robert wrote related post…

    Silk posts and stories…

    Trackback by Robert wrote related post — 2008/05/30 Friday @ 13:29:05

  2. Latest Refresh…

    HserfeR, Latest Refresh and Latest…

    Trackback by Latest Refresh — 2008/06/03 Tuesday @ 07:01:51

  3. Latest Sites News…

    SweN, Latest Sites News and Latest…

    Trackback by Latest Sites News — 2008/06/03 Tuesday @ 07:02:17

  4. Latest Blog News…

    SweN, Latest Blog News and Latest…

    Trackback by Latest Blog News — 2008/06/03 Tuesday @ 07:03:25

  5. Latest Site News…

    SweN, Latest Site News and Latest…

    Trackback by Latest Site News — 2008/06/03 Tuesday @ 07:04:08

  6. Latest News…

    SweN, Latest News and Latest…

    Trackback by Latest News — 2008/06/03 Tuesday @ 07:04:59

  7. Blog News…

    SweN, Blog News and Blog…

    Trackback by Blog News — 2008/06/03 Tuesday @ 07:05:18

  8. Sites News…

    SweN, Sites News and Sites…

    Trackback by Sites News — 2008/06/03 Tuesday @ 07:06:07

  9. News…

    SweN, News and News…

    Trackback by News — 2008/06/03 Tuesday @ 07:06:32

  10. Latest…

    TsetaL, Latest and Latest…

    Trackback by Latest — 2008/06/03 Tuesday @ 07:06:58

Leave a comment

You must be logged in to post a comment.

hoge