我有一个表单(Rails),它允许我使用file_field加载.csv文件.
在视图中:
在视图中:
<% form_for(:upcsv,:html => {:multipart => true}) do |f| %> <table> <tr> <td><%= f.label("File:") %></td> <td><%= f.file_field(:filename) %></td> </tr> </table> <%= f.submit("Submit") %> <% end %>
点击提交将我重定向到另一个页面(create.html.erb).该文件加载正常,我能够读取的内容,在这第二页.我试图在第二页显示.csv文件中的行数.
我的控制器(半伪代码):
class UpcsvController < ApplicationController def index end def create file = params[:upcsv][:filename] ... #params[:upcsv][:file_length] = file.length # Show number of lines in the file #params[:upcsv][:file_length] = file.size ... end end
当我的文件只包含7行时,file.length和file.size都会返回’91’.从我阅读的Rails文档中,一旦点击Submit按钮,Rails创建一个上传文件的临时文件,params [:upcsv] [:filename]包含temp / uploaded文件的内容,而不是文件.而且我不知道如何提取原始文件中的行数.获取文件中行数的正确方法是什么?
我的create.html.erb:
<table> <tr> <td>File length:</td> <td><%= params[:upcsv][:file_length] %></td> </tr> </table>
我在Rails真的很新(上周刚刚开始),所以请忍受我的愚蠢的问题.
谢谢!
更新:显然,我的文件中的’91’是个人字符(包括回车)的数量.我的文件中的每一行都有12位数字1换行= 13. 91/13 = 7.
解决方法
另一种读取行数的方式是
file.readlines.size