我想算红宝石文件的行,但我不能让任何IO
或File
计数的最后一行。 最后一行是什么意思? 下面是Atom编辑器获取最后一行的截图: 红宝石计数在文件中的行,包括最后一行(空)
Ruby返回20行,我需要21行。这里是这样的文件 https://copy.com/cJbiAS4wxjsc9lWI
我想算红宝石文件的行,但我不能让任何IO
或File
计数的最后一行。 最后一行是什么意思? 下面是Atom编辑器获取最后一行的截图: 红宝石计数在文件中的行,包括最后一行(空)
Ruby返回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
红宝石看到2号线在两种情况下:
a.lines #=> ["foo\n", "bar"]
a.lines.count #=> 2
b.lines #=> ["baz\n", "qux\n"]
b.lines.count #=> 2
你可以欺骗红宝石成通过添加任意的字符识别其后的换行符:
(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
令人敬畏的答复,谢谢! – acrogenesis 2015-02-11 15:27:09
红宝石lines
方法没有算上最后的空行。 欺骗,你可以在你流的末尾添加一个任意字符。
红宝石lines
返回2线这个例子:
1 Hello
2 World
3
相反,它返回在这种情况下
1 Hello
2 World
3 *
你可以发布你是如何计算的行数3行? – shivam 2015-02-11 06:52:04
你可以简单地加1('File.foreach(“file.txt的”)。算上+ 1')匹配的文本编辑器的最后一个行号。 – cremno 2015-02-11 07:21:10
没有21号线。你在编辑器中看到的第21条线是20年代末的'\ n'。所以,正确的答案是:这个文件中有20行。 – 2015-02-11 07:44:41