确定Ruby中的最后一行

时间:2011-10-24 21:05:23

标签: ruby file-io

我想知道如何确定我何时在我阅读的文件的最后一行。我的代码看起来像

File.open(file_name).each do |line|
    if(someway_to_determine_last_line)
end

我注意到有一个file.eof?方法,但是如何在读取文件时调用该方法?谢谢!

5 个答案:

答案 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处理不匹配环境的行为