二进制字符串erlang的第一个字

时间:2015-06-08 02:21:41

标签: functional-programming erlang pattern-matching

我需要做类似这样的事情<<“二进制中的一些文字”>&gt ;,它应该返回<<“Some”>。如何在没有分割功能的情况下进行,只能通过模式匹配和选择/如果使用Erlang的情况。谢谢。

2 个答案:

答案 0 :(得分:3)

虽然Attic' approach是正确的,但有一个简单的解决方案(包括修剪前导空格):

select id 
into @skill_id
from skill 
where name = "name";

update candidate_skill 
set skill_id = @skill_id
where ...;

答案 1 :(得分:0)

不确定为什么你不想使用二进制文件:split。这是实现此目标的一种方法,但我并不是非常喜欢它。

first_word_bin(Bin) ->
    Len = length_till_space(Bin, 0),
    <<Bin:Len/binary>>.

length_till_space(<<>>, Num) -> Num;
length_till_space(<<$\s, _/binary>>, Num) -> Num;
length_till_space(<<_:1/binary, Tl/binary>>, Num) ->
    length_till_space(Tl, Num + 1).

但是,如果二进制文件在开头有空格,例如

  

&LT;&LT;&#34;二进制的一些文本&#34;&gt;&gt;

然后结果将是&lt;&lt;&gt;&gt;,没有开头的空格,它将是&lt;&lt;&#;; Some&#34;&gt;&gt ;.这可以通过预先修剪起始空格来修复,但您可以使用相同的方法。

因此我们使用length_till_space来获取字符数,直到它到达空格。第一种情况检查二进制是否为空,第二种情况检查二进制文件的头是否是$ \ s(空格),最后一种情况只是进行尾调用并增加数字。

然后我们最后从二进制文件中获取前X个字符并返回该字符。