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