read numbers

Java House java4dev@REDACTED
Thu Dec 9 14:41:40 CET 2021


Ok I think I found the solution, which is exactly what I wanted to read
each digit as a number
26> <<P1:8, P2:8, P3:8, P4:8, P5:8, P6:8, P7:8, P8:8, P9:8, P10:8, P11:8,
P12:8>> = <<"111011001010">>.
<<"111011001010">>
27> list_to_integer([P1]).
1


Στις Πέμ 9 Δεκ 2021 στις 2:29 μ.μ., ο/η Java House <java4dev@REDACTED>
έγραψε:

> Thank you Roger for the answer
> I thought about it but since I have to parse all digits for every row that
> would mean a lot of entries as I have to create all possible combinations
> of 0/1 for every position of the row.
>
> I also tried to do something like that to convert binaries to digits
>
> binary_to_digit(<<"0">>) -> 0;
> binary_to_digit(<<"1">>) -> 1.
>
> but the problem is that once you match a binary
>
> parse([<<P1:8,P2:8....P12:8>>|T])
>
> The P1 parameter is not any more binary it is integer.
>
> I did a small example to show problem,
> you have in the file  111011001010
> You read it as binary which is something similar to
> 12> <<P1:8, P2:8, P3:8, P4:8, P5:8, P6:8, P7:8, P8:8, P9:8, P10:8, P11:8,
> P12:8>> = <<"111011001010">>.
> <<"111011001010">>
> 13> P1.
> *49*
> 15> integer_to_binary(P1).
> <<"49">>
>
> So it seems that even though the digit is 1 Erlangs parsing/matching
> converts it to something else and it seems impossible to read exactly what
> was the original value, which is a simple 0 or 1.
>
>
> Στις Πέμ 9 Δεκ 2021 στις 12:09 μ.μ., ο/η Roger Lipscombe <
> roger@REDACTED> έγραψε:
>
>> You could pattern match on the "0" and "1" directly...
>>
>> parse(Data) -> parse(Data, []).
>> parse(<<"0", Rest/binary>>, Acc) ->
>>     [false | parse(Rest, Acc)];
>> parse(<<"1", Rest/binary>>, Acc) ->
>>     [true | parse(Rest, Acc)];
>> parse(<<$\n, Rest/binary>>, Acc) ->
>>     parse(Rest, Acc);
>> parse(<<>>, Acc) -> Acc.
>>
>> On Thu, 9 Dec 2021 at 09:15, Java House <java4dev@REDACTED> wrote:
>> >
>> > Hello
>> >
>> > I am trying to read a file like with a series of 0s and 1s e.g.
>> >
>> > 111011001010
>> > 010011101110
>> > 110001001010
>> > 001101011101
>> > 110100000011
>> > 010110110010
>> >
>> >
>> > I read the file with
>> >
>> > {ok, Data} = file:read_file("binary.input"),
>> >
>> > which gives me a list of binaries and then by binary matching I get the
>> individual numbers in binary format
>> >
>> > parse([<<P1:8,P2:8....>>|T])
>> >
>> > But now I am having the following problem
>> >
>> > each P? may contain 0 or 1 but in reality it contains the ascii value
>> of the character 0 or 1
>> >
>> > that is 48 or 49.
>> >
>> > How do a get from the ascii value the actual number 0 or 1?
>> >
>> >
>> > Kind Regards
>> >
>> > Nikolas
>> >
>> >
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20211209/bd7a5194/attachment.htm>


More information about the erlang-questions mailing list