2011-12-30 3 views
0

Загружаю через форму файл и в контроллер читаем этот файл. Моя проблема в том, что я не знаю, горячий, чтобы обнаружить конец файла (=> при остановке цикла). Эта часть кода выглядит следующим образом:Ruby - определение конца прочитанного файла

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

В результате этой части (за исключением ошибки о ВФ) бесконечность во время цикла.

ответ

3

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

Если длина опущен или равен нулю, то не читает до EOF и преобразование применяется кодировка. Он возвращает строку, даже если EOF выполняется в начале.

Так что я думаю, вы должны просто сделать dat.read

Edit: если вы хотите, чтобы все строки файла, используйте dat.readlines - это будет возвращать Array из Strings

+2

И смотреть на больших файлов! – clyfe

+3

«И следите за большими файлами!», Да. Подача этого кода на пару ГБ данных должна замедлить работу сервера. –

+0

спасибо за ответы. Я забыл добавить, что мне нужно прочитать загруженный файл по строкам, потому что мне нужно сохранить каждую строку файла в БД. – user984621

Смежные вопросы