【问题标题】:How to print a line number in Ruby如何在 Ruby 中打印行号
【发布时间】:2014-08-15 14:03:25
【问题描述】:

我正在尝试检查文件以检查每一行的开头空格。我们想使用空格作为开始或制表符。如果一行以空格开头,另一行以制表符开头,我想通知用户空格不一致。还有一个例子,我想打印一行以空格开头的行和一行以制表符开头的行。我坚持获取行号部分。我尝试使用 file.gets 来获取第一个空格,但它对我不起作用(所以我没有将它包含在下面的代码中)。帮助我如何打印行号。

tabs = spaces = false

file = File.read("file_name")
file.each do |line|

  line =~ /^\t/ and tabs = true
  line =~ /^ / and spaces = true    

  if spaces and tabs
    puts  "The white spaces at the beginning of each line are not consistent.\n"
    break
  end
end

【问题讨论】:

  • +1 用于正确使用控制流操作。
  • @engineersmnky:我认为这是一个perlism。我从来没有在红宝石中看到过这个。通常是tabs = true if line =~ /^\t/
  • Perl 是 Ruby 灵感的一部分,因此运算符的目的几乎可以肯定正是针对上述情况。我看到andor 这些天越来越多地被Ruby 专家用于控制流,尽管我也看到它们在样式指南中被禁止或不鼓励使用。我问的问题是:“'and' 或 'or' 是否给了我任何我无法从更具可读性的 'if' 或 'unless' 中得到的东西?在我看来,后者通常更符合Ruby,更接近自然英语。(有 Ruby 等价于“Pythonic”这个词吗?)
  • @AFaderDarkly: ruby​​-esque :)
  • @AFaderDarkly Here 是关于这个主题的精彩帖子。

标签: ruby whitespace


【解决方案1】:

您应该能够使用file.lineno 来获取您正在文件中读取的当前行的编号。

file = File.open("file_name")
file.each do |line|
  ...
  puts "#{file.lineno}: #{line}" # Outputs the line number and the content of the line
end

【讨论】:

  • File.read('xx') 将整个文件作为字符串读取。然后eachlineno 将失败。可能是笔误。 ;)
  • 更多的是疏忽而不是拼写错误,但感谢您发现!
【解决方案2】:

根据@zajn 的回答:

file = File.open("filename.txt")
file.each do |line|
  puts "#{file.lineno}: #{line}"
end

或者你可以使用'每个索引':

File.open("another_file.txt").each_with_index do |line,i|
  puts "#{i}: #{line}"
end

看起来没有那么神奇。

【讨论】:

  • each_with_index 也将从 0 开始,而 lineno 从 1 开始。
猜你喜欢
  • 2015-05-01
  • 2016-01-22
  • 1970-01-01
  • 2015-06-14
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
相关资源
最近更新 更多