[erlang-questions] Unexpected behavior by io:fread.
Bengt Kleberg
bengt.kleberg@REDACTED
Tue Jan 27 12:18:56 CET 2009
Greetings,
I modified your program to skip white space before reading the first
item. Like this:
read_file(File) ->
io:fread(File, "", " "),
read_file(File, []).
Now the behavior is consistently wrong in the same way:
[5973,
4152,
40,
926,
53,
6,
3410,
51,
87,
86,
8161,
95,
66,
57,
25,
6890,
81,
80,
38,
92,
67,
7330,
28,
51,
76,
81,
18,
75,
44]
This is for erl -version
Erlang (ASYNC_THREADS,HIPE) (BEAM) emulator version 5.5.5
bengt
On Sat, 2009-01-24 at 00:10 +0000, cayle.spandon@REDACTED wrote:
> I have run into some unexpected behavior by io:fread.
>
> I was wondering if someone could check whether there is something
> wrong with the way I use io:fread or whether there is a bug in
> io:fread.
>
> I have a text file which contains a "triangle of numbers"as follows:
>
> <pre>
> 59
> 73 41
> 52 40 09
> 26 53 06 34
> 10 51 87 86 81
> 61 95 66 57 25 68
> 90 81 80 38 92 67 73
> 30 28 51 76 81 18 75 44
> ...
> </pre>
>
> There is a single space between each pair of numbers and each line
> ends with a carriage-return new-line pair.
>
> I use the following Erlang program to read this file into a list.
>
> <pre>
> -module(euler67).
> -author('Cayle Spandon').
>
> -export([solve/0]).
>
> solve() ->
> {ok, File} = file:open("triangle.txt", [read]),
> Data = read_file(File),
> ok = file:close(File),
> Data.
>
> read_file(File) ->
> read_file(File, []).
>
> read_file(File, Data) ->
> case io:fread(File, "", "~d") of
> {ok, [N]} ->
> read_file(File, [N | Data]);
> eof ->
> lists:reverse(Data)
> end.
> </pre>
>
> The output of this program is:
>
> <pre>
> (erlide@REDACTED)30> euler67:solve().
> [59,73,41,52,40,9,26,53,6,3410,51,87,86,8161,95,66,57,25,
> 6890,81,80,38,92,67,7330,28,51,76,81|...]
> </pre>
>
> Note how the last number of the fourth line (34) and the first number
> of the fifth line (10) have been merged into a single number 3410.
>
> When I dump the text file using "od" there is nothing special about
> those lines; they end with cr-nl just like any other line:
>
> <pre>
> > od -t a triangle.txt
> 0000000 5 9 cr nl 7 3 sp 4 1 cr nl 5 2 sp 4 0
> 0000020 sp 0 9 cr nl 2 6 sp 5 3 sp 0 6 sp 3 4
> 0000040 cr nl 1 0 sp 5 1 sp 8 7 sp 8 6 sp 8 1
> 0000060 cr nl 6 1 sp 9 5 sp 6 6 sp 5 7 sp 2 5
> 0000100 sp 6 8 cr nl 9 0 sp 8 1 sp 8 0 sp 3 8
> 0000120 sp 9 2 sp 6 7 sp 7 3 cr nl 3 0 sp 2 8
> 0000140 sp 5 1 sp 7 6 sp 8 1 sp 1 8 sp 7 5 sp
> 0000160 4 4 cr nl 8 4 sp 1 4 sp 9 5 sp 8 7 sp
> </pre>
>
> One interesting observation is that some of the numbers for which the
> problem occurs happen to be on 16-byte boundary in the text file (but
> not all, for example 6890).
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
More information about the erlang-questions
mailing list