2014-03-05 2 views
1

나는 루비를 사용하기 시작했으며, 파일 입력에 "gets"를 사용할 수있는 대안을 찾고 있습니다 ... 간단한 워밍업 프로그램을 작성하려고합니다. 다음과 같이 파일의 가장 긴 줄을 인쇄하십시오.루비 파일의 라인 인쇄

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 

아주 간단합니다. 최대 길이를 찾고, 가장 긴 줄을 인쇄하는 데 사용하십시오. 아직 멋진 것은 없습니다. 그러나 루비 longest.rb < (파일)을 실행할 때마다 나는 아무것도 얻지 못합니다. 왜냐하면 두 번째 while 루프에서 gets를 사용할 수 없기 때문입니다. 대안으로 무엇을 할 수 있습니까? :)

답변

1

은 파일 이름이 자신의 size (또는 length)와 Array#last가 정렬 된 배열

의 마지막 항목을 선택하는하여 선을 정렬 한 후 배열에 Enumerable#sort_by를 파일의 모든 라인을 읽을 수 foo.txt 사용 File#readlines입니다 가정
File.readlines("foo.txt").sort_by { |line| line.size }.last 
+0

어떻게 작동하는지 설명해 주시겠습니까? File 함수를 사용하는 방법을 잘 모르겠습니다. 프로그램에 입력 한 파일의 이름을 얻는 방법을 모르겠습니다. 이것을 할 수있는 방법이 있습니까? – user3290526

+0

@ user3290526 방금 대답의 맨 위에 설명을 추가했습니다. 질문이 명확하지 않으면 분명히 설명을 추가했습니다. – bjhaid