我想知道如何确定我何时在我阅读的文件的最后一行。我的代码看起来像
File.open(file_name).each do |line|
if(someway_to_determine_last_line)
end
我注意到有一个file.eof?方法,但是如何在读取文件时调用该方法?谢谢!
答案 0 :(得分:6)
如果您使用each
迭代文件,则在到达文件结尾后,最后一行将传递到块,因为最后一行是,根据定义,以EOF结尾的行。
所以只需在块中调用file.eof?
。
如果您想确定它是否是文件中的最后一个非空行,您必须实现某种预读。
答案 1 :(得分:3)
根据您对此“最后非空行”的操作,您可以执行以下操作:
last_line = nil
File.open(file_name).each do |line|
last_line = line if(!line.chomp.empty?)
# Do all sorts of other things
end
if(last_line)
# Do things with the last non-empty line.
end
答案 2 :(得分:1)
fd.eof?
有效,但只是为了好玩,这是一个适用于任何类型的枚举器的通用解决方案(Ruby 1.9):
class Enumerator
def +(other)
Enumerator.new do |yielder|
each { |e| yielder << e }
other.each { |e| yielder << e }
end
end
def with_last
Enumerator.new do |yielder|
(self + [:some_flag_here]).each_cons(2) do |a, b|
yielder << [a, b == :some_flag_here]
end
end
end
end
# a.txt is a file containing "1\n2\n3\n"
open("a.txt").lines.with_last.each do |line, is_last|
p [line, is_last]
end
哪个输出:
["1\n", false]
["2\n", false]
["3\n", true]
答案 3 :(得分:1)
秘密酱是.to_a
lines = File.open(filename).to_a
获取第一行:
puts lines.first
获取最后一行:
puts lines.last
获取文件的 n 行:
puts lines.at(5)
获取行数:
puts lines.count
答案 4 :(得分:0)
打开文件并使用readline方法:
要简单地操作文件的最后一行,请执行以下操作:
f = File.open('example.txt').readlines
f.each do |readline|
if readline[f.last]
puts "LAST LINE, do something to it"
else
puts "#{readline} "
end
end
第1行以行数组
读取文件第2行使用该对象并遍历每个对象
第3行测试当前行是否与最后一行匹配
第4行如果是匹配则动作
第5行&amp; 6处理不匹配环境的行为