2014-03-05 63 views
1

我剛剛開始使用Ruby,我正在尋找一個可能的替代方案使用「獲取」的文件輸入...我試圖寫一個簡單的熱身程序,將打印出文件中最長的一行,如下所示:在紅寶石打印文件行

def findMax 
    maxlength = 0 

    while line = gets 

    if line.length > maxlength then  
     maxlength = line.length 
    end 

    end 

    return maxlength 

end 


def printLines num 
    while line = gets 
    if line.length == num 
     puts line 
    end 
    end 
end 


printLines findMax 

很簡單。找出最大長度,以及用來打印出最長的一行,沒有任何幻想。但是,每當我用ruby longest.rb <(文件)運行它時,我什麼也得不到。這是因爲我無法在第二個while循環中使用gets,因爲它沒有更多內容可讀?我可以做什麼作爲替代方案? :)

回答

1

假設你的文件名是foo.txt使用File#readlines到該文件中的所有行讀入一個數組,然後Enumerable#sort_by通過size(或length)和Array#last挑排序數組

在最後一個項目的排序行
File.readlines("foo.txt").sort_by { |line| line.size }.last 
+0

你能解釋這是如何工作的嗎?我不知道如何使用任何文件功能,我絕對不知道如何獲取我輸入到程序中的文件的名稱。有沒有辦法做到這一點? – user3290526

+0

@ user3290526我剛剛在答案的頂部添加了一個解釋,如果它不夠清晰,可以隨意問,而且我會澄清 – bjhaid