2011-12-30 12 views
0

フォームを介してファイルをアップロードし、コントローラ内でこのファイルを読み込みます。私の問題は、私が知りません、ファイルの終わりを検出するために暑いです(=>ループを停止するとき)。Ruby - 読み込みファイルの末尾を検出する

dat = params[:data] 
while(d = dat.read) 
    puts d 
    break if d.eof #this doesn't work 
end 

ループしながら、この部分の結果は無限大(エラーに関するEOFを除く)です。このコードの一部は、このようになります。

答えて

3

http://ruby-doc.org/core-1.9.3/IO.html#method-i-readより:

長を省略又はゼロである場合は、EOFまで読み出して符号化変換が適用されます。 EOFが最初に満たされても文字列を返します。

は、だから私はあなただけdat.read

編集を行う必要がありますね。あなたは、ファイルのすべての行をしたい場合は、dat.readlinesを使用する - これはArrayStrings

+2

のリターンと大きなファイルに気をつけます! – clyfe

+3

"大容量のファイルに注意してください!"、はい。そのコードに数GBのデータを供給すると、サーバーが遅くなるはずです。 –

+0

お返事ありがとうございます。追加するのを忘れてしまったアップロードしたファイルを1行ずつ読む必要があります。ファイルのすべての行をDBに保存する必要があるからです。 – user984621

関連する問題