2014-03-05 33 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