.each读了多远?到最后?

时间:2014-01-29 17:12:42

标签: ruby file text each

抱歉新手问题。是否将.txt文件加载到以下代码中:

    line_count = 0
    File.open("text.txt").each {|line| line_count += 1}
    puts line_count

在将值传递给代码块之前,.each只是读到一行的结尾吗?很少解释会很棒。谢谢!

2 个答案:

答案 0 :(得分:1)

你可以使用.each_line更明确,但是,http://www.ruby-doc.org/core-2.0.0/IO.html#method-i-each每个都读一行。

f = File.new("testfile")
f.each {|line| puts "#{f.lineno}: #{line}" }

答案 1 :(得分:1)

阅读文档非常重要非常重要,因为那里解释了各种各样的事情。例如,the documentation for each说:

  

为ios中的每一行执行块,其中行由sep分隔。

sep表示“\ r”,“\ n”或“\ r \ n”,具体取决于运行代码的操作系统,它也是特殊$/全局变量的值其中包含该操作系统的默认行结束符。如果您知道该文件使用其他内容,则可以告诉Ruby为行结束/分隔符使用不同的值。

关于您的代码:

我这样做:

line_count = 0
File.foreach("text.txt") do |line|
  line_count += 1
end
puts line_count

foreach非常不言自明,在编写代码时很重要。您希望它尽可能地自我记录。 foreach遍历文件中的“each”行。它还假设行尾与$/相同,但您可以强制它为不同的东西,可能是字母“z”或“。”。或“”,取决于你当时的心血来潮和幻想。