Re: read numbers
Java House <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <CAJYUOtc2Wo+9p2DrgnFzUE0EUGPmGEA2-53wnArW3Z5SLKNjVg@mail.gmail.com> |
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 < [email protected]> έγραψε: > 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 <[email protected]> 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 > > > > >