Ich schreibe ein Programm, das von einem Eingang Stream liest, das heißtErlang: Lesen von einem Eingangsstrom in einer effizienten Weise
erl -run p main -noshell -s erlang halt < input
Das Problem ist, dass es viel Zeit in Anspruch nimmt, es zu lesen (der Eingangsstrom ist sehr groß) mit dieser Lesefunktion:
read_input(L) ->
case io:get_line("") of
eof ->
lists:reverse(L);
E0 ->
read_input([E0|L])
end.
ich habe für effizientere Alternativen zu suchen, aber ich habe nichts gefunden. Ich habe versucht, die Datei zu lesen mit
{ok, Binary} = file:read_file("input")
Dies ist bei weitem viel effizienter. Das Problem ist, dass ich dieses Programm auf einer Plattform ausführen muss, auf der der Name unbekannt ist, also würde ich eine Alternative dazu brauchen. zusätzlich kann ich die Flags, die beim Laufen verwendet werden, z. Flag -noinput kann nicht zur Befehlszeile hinzugefügt werden.
Welche Hilfe Sie geben können, wird begrüßt.
Wenn das Lesen der gesamten Datei auf einmal akzeptabel ist, wie Sie zu zeigen scheinen, warum nicht einfach '{ok, Binary} = file: read_file (InputFile)'? Ich verstehe nicht den Punkt der Verwendung von "Katze", um die Eingabe zu kopieren und stattdessen die Kopie zu lesen. –
Ist dies eine Befehlszeilenanwendung? Wird das Programm immer von der Kommandozeile aus aufgerufen? Woher kommt der Eingangsstrom? Was passiert mit den Daten nach dem Lesen? –
@SteveVinoski Ich habe die Frage bearbeitet, um die Katzensache zu entfernen, weil sie verwirrend war. Ja, ich konnte es direkt aus der Datei lesen, aber ich kenne seinen Namen nicht, daher funktioniert diese Lösung nur während des Tests. –