11

公式ドキュメントでは指定されていません。EOFError が「ファイルの終わりエラー」を意味することは理解していますが、それは正確にはどういう意味ですか? ファイル リーダーがファイルの最後に到達しても、それはエラーには思えません。

4

2 に答える 2

17

EOFError は ruby​​ のすべての入出力の基本となるクラスであるすべての IO で便利です。ここで、Unix のコア概念も覚えておいてください。すべてはファイルです。これにはソケットが含まれます。したがって、ソケットを開いてそこから読み取っている場合、ファイルの終わりに遭遇するという例外的な状況が発生する可能性があります。

そこにあるすべての例は、EOFError の単純な使用法 (テキスト ファイルの読み取り中) を示していますが、これはあまり役に立ちません。ただし、ソケットを多用する net/http やその他のクラスを調べてみると、この例外が使用されていることがわかります。

net/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
于 2009-08-13T15:29:03.487 に答える
9

EOFError (End of File エラー) は、既にファイルの末尾を参照しているファイル オブジェクトに対して操作を実行しようとするとスローされます。この例ではreadline、行が存在しないときにしようとしています。

例えば:

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 なしで実現できます。

File.open(filename).each do |line|
    sline = FasterCSV.parse_line(line)
    # Do stuff with sline        
end
于 2009-08-13T14:57:44.510 に答える