Tengo un formulario (Rails) que me permite cargar un archivo .csv usando el file_field
. En la vista:¿Cuenta la longitud (número de líneas) de un archivo 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 %>
clic en Enviar me redirige a otra página (create.html.erb). El archivo se cargó bien, y pude leer el contenido muy bien en esta segunda página. Estoy tratando de mostrar el número de líneas en el archivo .csv en esta segunda página.
Mi controlador (semi-pseudocódigo):
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
Ambos file.length
y file.size
devuelve '91' cuando mi archivo sólo contiene 7 líneas. De la documentación de Rails que leí, una vez que se hace clic en el botón Enviar, Rails crea un archivo temporal del archivo cargado, y el params[:upcsv][:filename]
contiene el contenido del archivo temp/upload y no el ruta al archivo. Y no sé cómo extraer el número de líneas en mi archivo original. ¿Cuál es la forma correcta de obtener el número de líneas en el archivo?
Mi create.html.erb:
<table>
<tr>
<td>File length:</td>
<td><%= params[:upcsv][:file_length] %></td>
</tr>
</table>
estoy realmente nuevo en carriles (acaba de empezar la semana pasada), así que por favor tengan paciencia mis preguntas tontas.
¡Gracias!
Actualización: aparentemente ese número '91' es el número de caracteres individuales (incluido el retorno de carro) en mi archivo. Cada línea en mi archivo tiene 12 dígitos + 1 línea nueva = 13. 91/13 = 7.
Sea muy cuidadoso que permite que un archivo sea subido sin algunas pruebas en tamaño del archivo. Imagine los problemas si el archivo usa todo el espacio de disco en su disco. O bien, si el archivo tiene muchos gigabytes de retornos de carro, y su código en Rails está girando tratando de leer y contar las líneas, DOSing su host. Si está en Linux, es posible que desee que el comando 'wc' del sistema operativo lo levante, ya que puede devolver el número de líneas y el número de caracteres en el archivo muy rápidamente, sin que Rails tenga que abrirlo y leerlo. –