【问题标题】:Ruby - detecting the end of the read fileRuby - 检测读取文件的结尾
【发布时间】:2011-12-30 19:34:26
【问题描述】:

我通过表单上传一个文件,并在控制器中读取该文件。我的问题是,我不知道,检测文件结尾很热(=> 停止循环时)。这部分代码如下所示:

dat = params[:data]
while(d = dat.read)
  puts d
  break if d.eof #this doesn't work
end

这部分的结果是(除了关于eof的错误)infinity while looping。

【问题讨论】:

    标签: ruby file upload eof


    【解决方案1】:

    来自http://ruby-doc.org/core-1.9.3/IO.html#method-i-read

    如果 length 被省略或为 nil,它会一直读取到 EOF 并应用编码转换。即使在开始时遇到 EOF,它也会返回一个字符串。

    所以我想你应该这样做dat.read

    编辑:如果您想要文件的所有行,请使用dat.readlines - 这将返回StringsArray

    【讨论】:

    • 小心大文件!
    • “注意大文件!”,是的。向该代码提供几 GB 的数据应该会使服务器变慢。
    • 感谢大家的回复。我忘了补充我需要逐行读取上传的文件,因为我需要将文件的每一行都保存到DB中。
    • dat.eachdat.lines 将逐行为您提供文件。
    猜你喜欢
    • 1970-01-01
    • 2013-07-12
    • 2016-08-13
    • 1970-01-01
    • 2019-05-10
    • 2012-06-12
    • 2013-07-14
    • 2011-06-02
    • 2019-07-24
    相关资源
    最近更新 更多