2009-08-13 8 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ことなく達成することができる:例えば

ルビーで。また、Unixの核心概念を覚えておいてください。すべてがファイルです。これにはソケットも含まれます。だから、あなたがソケットを開いていてそこから読んでいるのであれば、例外的にファイルの終わりに遭遇するかもしれません。

すべての例では、実際には役に立たない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

これらの2つがファイル処理に相当するのであれば、少し役に立ちます。ありがとう – Tony

関連する問題