2016-10-18 49 views
0

在我的應用程序中,我有一個.txt文件,其中我open/read用戶配置文件視圖。 .txt文件包含一些數字。Ruby on Rails - 在File.open上添加限制,訂單和總和

這是我到目前爲止有:

f = File.open("public/users/14/user.txt", "r") 
- f.each_line do |d| 
    %p= d 

我可以put出所有這些都是在該文件上的數字。有什麼方法可以添加limit & order (start from bottom to top)

我想:

f.limit(4).order('DESC').each_line do |d| 

File.open("public/users/14/user.txt", "r").limit(5) 

當我嘗試這些,我得到錯誤:undefined method limitundefined method order

是否也可以sum該文件上的所有數字?

+0

錯誤之際,有一個文件對象沒有這樣的方法。這些方法是爲ActiveRecord對象定義的。 –

回答

1

這應該工作:

@lines = IO.readlines('public/users/14/user.txt').sort.reverse.first(4) 

你應該把上面的控制器和視圖使用它:

- @lines.each do |line| 
    %p= line 
+0

謝謝@Stefan,就像一個魅力:)但我怎麼能夠爲該文件中的所有數字做'sum'? – Rubioli

+0

'@ lines'是一串字符串。因此,首先,您必須將字符串轉換爲數字(根據您的用例,可以是「Integer」,「Float」或「BigDecimal」),例如調用['String#to_i'](http:// ruby-doc.org/core-2.3.1/String.html#method-i-to_i)。一旦元素是數字,您可以使用['Enumerable#sum'](http://api.rubyonrails.org/classes/Enumerable.html#method-i-sum),即'@ lines.sum'將它們求和。 – Stefan

+0

感謝一羣@Stefan。我嘗試了'hb_pb.to_i'&'hb_pb.to_f',並得到這個錯誤:'[0.8 \ n「,」0.8 \ n「,」0.8 \ n「,」0.4 \ n「]的undefined方法to_f:Array '。我在這裏做錯了什麼? – Rubioli

0

這些是由rails提供的ActiveRecord方法。我建議你閱讀ruby的IO文檔。 Here是文檔。

語法是這樣read(name, [length [, offset]]) → string

和使用是像IO.read("testfile", 20, 10)

這裏20是長度在字節和10被抵消。

+0

謝謝@sajan。這有效,但不是我想要的。它所做的是從該文件中取20個字符,並且不限制行,它限制字符。 – Rubioli

+0

好的,那麼我想你可能不得不依賴於自己的自定義條件,如其他答案中的建議。 – Sajan

0

您可以使用該範圍的情況。在這個例子中,它從底部的第4行開始一直到最後一行。

File.open(FILE) do |f| 
    f.readlines[-4..-1] 
end 
+0

謝謝@bekicot。這個觀點如何? – Rubioli

+1

在視圖中這是不好的做法。您應該通過控制器完成並將結果發送到視圖。除非我有一個很好的理由,否則我會避免這樣做。 – Yana