2015-02-11 54 views
0

我想算紅寶石文件的行,但我不能讓任何IOFile計數的最後一行。 最後一行是什麼意思? 下面是Atom編輯器獲取最後一行的截圖: enter image description here紅寶石計數在文件中的行,包括最後一行(空)

Ruby返回20行,我需要21行。這裏是這樣的文件 https://copy.com/cJbiAS4wxjsc9lWI

+1

你可以發佈你是如何計算的行數3行? – shivam 2015-02-11 06:52:04

+0

你可以簡單地加1('File.foreach(「file.txt的」)。算上+ 1')匹配的文本編輯器的最後一個行號。 – cremno 2015-02-11 07:21:10

+0

沒有21號線。你在編輯器中看到的第21條線是20年代末的'\ n'。所以,正確的答案是:這個文件中有20行。 – 2015-02-11 07:44:41

回答

2

有趣的問題(雖然你的例子文件是繁瑣的)。你的編輯器將顯示一個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 
+0

令人敬畏的答覆,謝謝! – acrogenesis 2015-02-11 15:27:09

1

紅寶石lines方法沒有算上最後的空行。 欺騙,你可以在你流的末尾添加一個任意字符。

紅寶石lines返回2線這個例子:

1 Hello 
2 World 
3 

相反,它返回在這種情況下

1 Hello 
2 World 
3 *