read numbers

Java House java4dev@REDACTED
Thu Dec 9 14:29:22 CET 2021


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/92c787f5/attachment.htm>


More information about the erlang-questions mailing list