gpt4 book ai didi

ruby - 我如何检测 Ruby 中的文件结尾?

转载 作者:数据小太阳 更新时间:2023-10-29 07:45:16 24 4
gpt4 key购买 nike

我编写了以下脚本来读取 CSV 文件:

f = File.open("aFile.csv")
text = f.read
text.each_line do |line|
if (f.eof?)
puts "End of file reached"
else
line_num +=1
if(line_num < 6) then
puts "____SKIPPED LINE____"
next
end
end

arr = line.split(",")
puts "line number = #{line_num}"
end

如果我删除以下行,这段代码运行良好:

 if (f.eof?)
puts "End of file reached"

有了这一行,我得到了一个异常(exception)。

我想知道如何在上面的代码中检测到文件结尾。

最佳答案

试试这个简短的例子:

f = File.open(__FILE__)
text = f.read
p f.eof? # -> true
p text.class #-> String

使用 f.read,您可以将整个文件读入文本并到达 EOF。(备注:__FILE__ 是脚本文件本身。您可以使用 csv 文件)。

在您的代码中,您使用 text.each_line。这将为字符串文本执行 each_line。它对 f 没有影响。

您可以在不使用可变文本的情况下使用 File#each_line。 EOF 测试不是必需的。 each_line 在每一行上循环并自行检测 EOF。

f = File.open(__FILE__)
line_num = 0
f.each_line do |line|
line_num +=1
if (line_num < 6)
puts "____SKIPPED LINE____"
next
end

arr = line.split(",")
puts "line number = #{line_num}"
end
f.close

您应该在阅读后关闭文件。为此使用 block 更像 Ruby:

line_num = 0
File.open(__FILE__) do | f|
f.each_line do |line|
line_num +=1
if (line_num < 6)
puts "____SKIPPED LINE____"
next
end

arr = line.split(",")
puts "line number = #{line_num}"
end
end

一般性评论:Ruby 中有一个 CSV 库。通常最好使用它。

关于ruby - 我如何检测 Ruby 中的文件结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17634198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com