возникли проблемы с CSV.parse, не обновляющим строки

Я запускаю rails 3.0.1 с ruby ​​1.9.2p290 и пытаюсь разобрать CSV-файл с помощью CSV (насколько я понимаю, CSV теперь использует более быстрый код CSV).

Я следил за хорошей записью о настройке этого для более быстрого CSV, и мне нужно было внести лишь незначительные изменения, чтобы заставить его работать (изменить требование на CSV вместо fastCSV и т. д.).

Я могу загрузить файл csv в таблицу с правильным количеством отсчитанных столбцов, но все это одна строка, независимо от того, сколько строк. Например, если бы в моем CSV-файле было три строки с тремя столбцами, моя таблица import_table отобразила бы номер столбца 0,1,2 три раза без увеличения номера строки. Таким образом, он распознает конец каждой строки моего CSV-файла, но не увеличивает счетчик строк. Что мне не хватает?

Мой csvcontroller выглядит так:

            require 'csv'

            class Admin::CsvController < ApplicationController
              def import
              end

              def upload

                table = ImportTable.new :original_path => params[:upload][:csv].original_filename, 
                                        :import_type => params[:type]
                uploaded_file = params[:upload][:csv].read

                CSV.parse(uploaded_file)  do |cells|
                  row_index = 0
                  column_index = 0
                  cells.each  do |cell|
                    table.import_cells.build :column_index => column_index, :row_index => row_index, :contents => cell
                    column_index += 1
                  end
                  row_index += 1
                end
                table.save
                redirect_to import_table_path(table)
              end
            end

Я попытался использовать .readline вместо .read, но это открыло еще один шарик воска.


person Aaron Thomas    schedule 06.10.2011    source источник
comment
Ничего себе, я только что обнаружил, где мой идиотизм на этом. row_index = 0 должен быть вне цикла CSV.parse. хорошо, теперь все хорошо. Я отмечу это как ответ еще через 7 часов, когда мне будет разрешено это сделать.   -  person Aaron Thomas    schedule 06.10.2011


Ответы (1)


Ничего себе, я только что обнаружил, где мой идиотизм на этом. row_index = 0 должен быть вне цикла CSV.parse.

person Aaron Thomas    schedule 07.10.2011