2009-08-13 3 views

답변

13

는 EOFError가 IO, 모든 입력/출력의 기준이되는 클래스의 모두 편리하다 :

import_file = File.open(filename) 
begin 
    while (line = import_file.readline) 
    sline = FasterCSV.parse_line(line) 
    # Do stuff with sline 
    end 
rescue EOFError 
    # Finished processing the file 
end 

같은 일이 참고 EOFError없이 달성 될 수있다 : 예를 들어

루비에서. 이제 유닉스 핵심 개념을 기억하자. 모든 것이 파일이다. 여기에는 소켓이 포함됩니다. 그래서 소켓을 열어서 읽는 중이라면 예외적 인 상황에서 파일의 끝을 보게 될 것입니다.

모든 예제는 실제로 유용하지 않은 EOFError (텍스트 파일을 읽는 중)의 사소한 용도를 보여줍니다. 그러나 net/http 또는 소켓을 많이 사용하는 다른 클래스를 통해 파고 시작하면이 예외가 사용되는 것을 볼 수 있습니다.

편집 됨 응답을 그물/FTP

def getline 
    line = @sock.readline # if get EOF, raise EOFError 
    line.sub!(/(\r\n|\n|\r)\z/n, "") 
    if @debug_mode 
    print "get: ", sanitize(line), "\n" 
    end 
    return line 
end 
+1

+1 더 나은 대답을 위해. – Swanand

+1

감사합니다. Swanand. 나는 예제 코드를 내가 좋아하는 것을 사용하여 빚지고있다. "/usr/lib/ruby/1.8/net/ -name * .rb -exec grep EOFError/dev/null '{}'\;" –

9

EOFError (파일 끝 오류)는 이미 파일의 끝을 참조하고있는 파일 객체에서 작업을 수행하려고 할 때 발생합니다. 이 예에서는 행이 존재하지 않을 때 readline으로 시도하고 있습니다.

File.open(filename).each do |line| 
    sline = FasterCSV.parse_line(line) 
    # Do stuff with sline   
end 
+1

덕분에이 예제를 추가 할 수 있습니다. EOFError는 "파일 끝 오류"를 의미하는 것으로 알고 있습니다. 하지만 그게 정확히 무슨 뜻입니까? 독자가 파일의 끝에 도달하면 오류 메시지가 나에게 들리지 않습니다. – Tony

+0

미안하지만, 어리석은 나를 생각하지 않아. 나는 그 대답을 업데이트했으나, 아직도 당신의 질문에 답을하지 못할 수도 있습니다. – Swanand

+0

이 두 파일 처리 꽤 동등한 경우 조금 도움이됩니다. 덕분에 – Tony