Tôi có một biểu mẫu (Rails) cho phép tôi tải tệp .csv bằng cách sử dụng file_field
. Trong giao diện:Đếm độ dài (số dòng) của tệp 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 %>
Nhấp Gửi chuyển hướng tôi đến một trang khác (create.html.erb). Các tập tin đã được tải tốt, và tôi đã có thể đọc nội dung tốt trong trang thứ hai này. Tôi đang cố gắng hiển thị số dòng trong tệp .csv trong trang thứ hai này.
điều khiển của tôi (semi-giả):
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
Cả file.length
và file.size
lợi nhuận '91' khi tập tin của tôi chỉ chứa 7 dòng. Từ tài liệu Rails mà tôi đọc, khi nút Gửi được nhấp, Rails tạo tệp tạm thời của tệp được tải lên và params[:upcsv][:filename]
chứa nội dung của tệp tạm thời/đã tải lên chứ không phải đường dẫn vào tệp. Và tôi không biết cách trích xuất số dòng trong tệp gốc của mình. Cách chính xác để có được số dòng trong tệp là gì?
create.html.erb của tôi:
<table>
<tr>
<td>File length:</td>
<td><%= params[:upcsv][:file_length] %></td>
</tr>
</table>
Tôi thực sự mới tại Rails (chỉ mới bắt đầu vào tuần trước), vì vậy xin vui lòng chịu với những câu hỏi ngu ngốc của tôi.
Cảm ơn bạn!
Cập nhật: dường như số '91' là số ký tự riêng lẻ (bao gồm cả dấu xuống dòng) trong tệp của tôi. Mỗi dòng trong tệp của tôi có 12 chữ số + 1 dòng mới = 13. 91/13 = 7.
Hãy thực cẩn thận cho phép một tập tin được tải lên mà không cần một số xét nghiệm trên filesize. Hãy tưởng tượng các vấn đề nếu tập tin sử dụng tất cả các không gian đĩa trên ổ đĩa của bạn. Hoặc, nếu tập tin là nhiều gigabyte của vận chuyển-trả về, và mã của bạn trong Rails đang quay cố gắng để đọc và đếm các dòng, DOSing máy chủ của bạn. Nếu bạn đang sử dụng Linux, bạn có thể muốn lệnh 'wc' của hệ điều hành thực hiện việc nâng cấp cho bạn vì nó có thể trả về số lượng dòng và số ký tự trong tệp rất nhanh, mà không có Rails phải mở và đọc nó. –