Ruby 计算文件中的行数,包括最后一行(空)

Ruby Count lines in file including last line(empty)

我正在尝试使用 ruby 计算文件的行数,但我无法使用 IOFile 来计算最后一行。 最后一行是什么意思? 这是 Atom 编辑器获取最后一行的屏幕截图

Ruby returns 20行,我需要21行。这是这样的文件 https://copy.com/cJbiAS4wxjsc9lWI

有趣的问题(尽管您的示例文件很麻烦)。您的编辑器显示第 21 行,因为第 20 行 以换行符结尾 。如果没有尾随换行符,您的编辑器将显示 20 行。

这是一个更简单的例子:

a = "foo\nbar"
b = "baz\nqux\n"

文本编辑器会显示:

# file a
1 foo
2 bar

# file b
1 baz
2 qux
3

Ruby 但是在任何一种情况下都会看到 2 行:

a.lines       #=> ["foo\n", "bar"]
a.lines.count #=> 2

b.lines       #=> ["baz\n", "qux\n"]
b.lines.count #=> 2

您可以通过添加任意字符来欺骗 Ruby 识别结尾的换行符:

(a + '_').lines       #=> ["foo\n", "bar_"]
(a + '_').lines.count #=> 2

(b + '_').lines       #=> ["baz\n", "qux\n", "_"]
(b + '_').lines.count #=> 3

或者您可以使用匹配行尾 ($) 或字符串结尾 (\Z) 的 Regexp:

a.scan(/$|\Z/)       #=> ["", ""]
a.scan(/$|\Z/).count #=> 2

b.scan(/$|\Z/)       #=> ["", "", ""]
b.scan(/$|\Z/).count #=> 3

Ruby lines 方法不计算最后一个空行。 为了欺骗,您可以在流的末尾添加任意字符。

Ruby lines returns 这个例子有 2 行:

1 Hello
2 World
3 

相反,在这种情况下 returns 3 行

1 Hello
2 World
3 *