[erlang-questions] Unexpected behavior by io:fread.

cayle.spandon@REDACTED cayle.spandon@REDACTED
Sat Jan 24 01:10:10 CET 2009


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 -ta 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).
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20090124/a0e20d77/attachment.htm>


More information about the erlang-questions mailing list