Dies ist eine Erlang Frage.Unerwartetes Verhalten von io: fread in Erlang
Ich bin in ein unerwartetes Verhalten von io: fread geraten.
Ich frage mich, ob jemand überprüfen könnte, ob etwas mit der Art und Weise, wie ich io: fread benutze, nicht stimmt oder ob es einen Fehler in io: fread gibt.
Ich habe eine Textdatei, die ein „Dreieck von Zahlen“ enthält, wie folgt:
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 ...
Es gibt einen einzigen Raum zwischen jedem Paar von Zahlen und jede Zeile endet mit einem Wagenrücklauf new-Leitungspaar .
Ich benutze das folgende Erlang-Programm, um diese Datei in eine Liste zu lesen.
-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.
Der Ausgang dieses Programms ist:
([email protected])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|...]
Hinweis, wie die letzte Zahl der vierten Leitung (34) und der ersten Reihe der fünften Leitung (10) zu einem einzigen verschmolzen Nummer 3410.
Wenn ich die Textdatei mit "od" ablege, gibt es nichts besonderes an diesen Zeilen; sie enden mit cr-nl wie jede andere Linie:
> 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
Eine interessante Beobachtung ist, dass einige der Zahlen, für das das Problem auf 16-Byte-Grenze in der Textdatei (aber nicht alle sein passieren auftritt, zum Beispiel 6890).
Dies sieht für alles wie ein Fehler aus. Wenn Sie die Länge der Daten angeben, sind es 32 Elemente, nicht 36 Elemente. Die Anordnung der Daten in anderen Formaten verschiebt den Fehler einfach. (Ich habe es in Vista + Erland 5.6.5 versucht). – Godeke