【发布时间】:2016-09-02 14:04:10
【问题描述】:
我正在编写一个从 input 流中读取的程序,即
erl -run p main -noshell -s erlang halt < input
问题是使用这个读取函数读取它需要很多时间(输入流很大):
read_input(L) ->
case io:get_line("") of
eof ->
lists:reverse(L);
E0 ->
read_input([E0|L])
end.
我一直在寻找更有效的替代方案,但一无所获。我尝试使用
读取文件{ok, Binary} = file:read_file("input")
这要高效得多。问题是我必须在名称未知的平台上运行这个程序,所以我需要一些替代方法。另外,我无法选择运行时使用的标志,例如flag -noinput 不能添加到命令行。
我们欢迎您提供任何帮助。
【问题讨论】:
-
如果像您所说的那样一次读取整个文件是可以接受的,为什么不只是
{ok, Binary} = file:read_file(InputFile)?我不明白使用cat复制输入并改为读取副本的意义。 -
这是一个命令行应用程序吗?程序是否总是像这样从命令行调用?输入流从哪里来?读取数据后发生了什么变化?
-
@SteveVinoski 我已经编辑了问题以删除猫的东西,因为它令人困惑。是的,我可以直接从文件中读取它,但我不知道它的名称,所以这个解决方案只在测试时有效。
-
@nu-ex 是的,程序应该总是这样使用,输入流应该这样读取。输入来自将运行它的系统(如上所示)。之后处理数据。它主要包含整数,所以我必须在之后解析它们。
-
你在什么平台上运行?
标签: performance io erlang inputstream processing-efficiency