Ruby 计算文件中的行数,包括最后一行(空)
Ruby Count lines in file including last line(empty)
我正在尝试使用 ruby 计算文件的行数,但我无法使用 IO
或 File
来计算最后一行。
最后一行是什么意思?
这是 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 *
我正在尝试使用 ruby 计算文件的行数,但我无法使用 IO
或 File
来计算最后一行。
最后一行是什么意思?
这是 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 *