Binary String pattern matching

Nick McKinney nick@REDACTED
Thu Dec 10 08:36:50 CET 2020


On 12/9/20 16:00, Java House wrote:
> Hi
> 
> yes the binary string is of the format <<"xxx">>
>>
>>     <<"3123CHF">>
>>     <<"341424343EUR">>
>>     <<"14143US">>
>   Thank you for the answer.
> So is there any other way?
> erlang provides the binary_to_list, is there any way to achieve the same 
> with a list becasue I tried similare patterns with list and it does not 
> work e.g
> [V|T] this will always match the first character of the string to V
> and [V|"CHF"] does not work neither.
> 
> Best
> Nikolas

You could try string:to_integer/1 to parse your integer:

1> string:to_integer(<<"3123CHF">>).
{3123,<<"CHF">>}

That would be simple enough to pattern match.

> Στις Τετ, 9 Δεκ 2020 στις 7:58 μ.μ., ο/η kuna.prime 
> <kuna.prime@REDACTED <mailto:kuna.prime@REDACTED>> έγραψε:
> 
>     HI,
> 
>     first of all binary string is of form <<"3123CHF">> and not
>     <<3123CHF>> i'm just stating it in case there was a mistake in the
>     first mail
> 
>     to answer your questio in order to pattern match you need to know
>     the size of field you are matching so
> 
>     <<X:4/binary, "CHF">> = <<"3123CHF">>.
> 
>     will match fist 4 bytes and interpret that as new binary (X).
> 
> 
>     Sent with ProtonMail <https://protonmail.com> Secure Email.
> 
>     ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
>     On Wednesday, December 9, 2020 7:28 PM, Java House
>     <java4dev@REDACTED <mailto:java4dev@REDACTED>> wrote:
> 
>>     there is a typo in the example
>>     currrency_to_credits({cur, << Value , "CHF">>}, Acc)
>>       when Value >= <<"1000">>, Value =< <<"10000">> ->
>>          {chf, Acc + Value };
>>     currrency_to_credits({cur, << Value , "EUR">>}, Acc)
>>       when Value >= <<"1000">>, Value =< <<"10000">> ->
>>          {eur, Acc + Value };
>>     currrency_to_credits({cur, << Value , "US">>}, Acc)
>>       when Value >= <<"1000">>, Value =< <<"10000">> ->
>>          {us, Acc + Value };
>>
>>     Στις Τετ, 9 Δεκ 2020 στις 7:17 μ.μ., ο/η Java House
>>     <java4dev@REDACTED <mailto:java4dev@REDACTED>> έγραψε:
>>
>>         Hello all
>>
>>         I am learning Erlang and have stuck to the following problem.
>>         How to write a function with pattern matching when the
>>         parameter is a binary string.
>>
>>         I have a list of binary strings e.g.
>>         <<3123CHF>>
>>         <<341424343EUR>>
>>         <<14143US>>
>>
>>         I am trying to create a function that matches according to a
>>         pattern.
>>
>>         currrency_to_credits({cur, <<A, "CHF">>}, Acc)
>>         when Value >= <<"1000">>, Value =< <<"10000">> ->
>>              {chf, Acc + A};
>>         currrency_to_credits({cur, <<A, "EUR">>}, Acc)
>>         when Value >= <<"1000">>, Value =< <<"10000">> ->
>>              {eur, Acc + A};
>>         currrency_to_credits({cur, <<A, "US">>}, Acc)
>>         when Value >= <<"1000">>, Value =< <<"10000">> ->
>>              {us, Acc + A};
>>
>>         But this does not seem to be the right way.
>>         How can I create a pattern for binary string?
>>         will it work better for list string? How?
>>
>>         Thank you
>>         Nikolas
> 


More information about the erlang-questions mailing list