我正在尝试使用ruby来计算文件的行数,但我无法让IO
或File
计算最后一行。
我最后一行是什么意思?
这是Atom编辑器获取最后一行的屏幕截图
Ruby返回20行,我需要21行。这是这样的文件 https://copy.com/cJbiAS4wxjsc9lWI
答案 0 :(得分:2)
有趣的问题(虽然您的示例文件很麻烦)。您的编辑器显示第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
或者您可以使用匹配行尾(Regexp
)或字符串结尾($
)的\Z
:
a.scan(/$|\Z/) #=> ["", ""]
a.scan(/$|\Z/).count #=> 2
b.scan(/$|\Z/) #=> ["", "", ""]
b.scan(/$|\Z/).count #=> 3
答案 1 :(得分:1)
Ruby lines
方法不计算最后一个空行。
要欺骗,您可以在流的末尾添加任意字符。
Ruby lines
为此示例返回2行:
1 Hello
2 World
3
相反,它在这种情况下返回3行
1 Hello
2 World
3 *