【发布时间】: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。
【问题讨论】:
我通过表单上传一个文件,并在控制器中读取该文件。我的问题是,我不知道,检测文件结尾很热(=> 停止循环时)。这部分代码如下所示:
dat = params[:data]
while(d = dat.read)
puts d
break if d.eof #this doesn't work
end
这部分的结果是(除了关于eof的错误)infinity while looping。
【问题讨论】:
来自http://ruby-doc.org/core-1.9.3/IO.html#method-i-read:
如果 length 被省略或为 nil,它会一直读取到 EOF 并应用编码转换。即使在开始时遇到 EOF,它也会返回一个字符串。
所以我想你应该这样做dat.read
编辑:如果您想要文件的所有行,请使用dat.readlines - 这将返回Strings 的Array
【讨论】:
dat.each 或 dat.lines 将逐行为您提供文件。