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