0

Rails3.0.1をruby1.9.2p290で実行し、CSVを使用してCSVファイルを解析しようとしています(私が理解していることから、CSVは現在より高速なCSVコードを使用しています)。

私はこれをfasterCSVに設定することについての素晴らしい記事に従っていて、それを機能させるために小さな変更を加えるだけで済みました(fasterCSVではなくCSVに変更する必要がありますなど)

正しい列数がカウントされたテーブルにcsvファイルをロードすることはできますが、行数に関係なくすべて1行です。たとえば、csvファイルに3つの列を持つ3つの行がある場合、import_tableは行番号をインクリメントせずに列番号0,1,2を3回表示します。したがって、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

.readの代わりに.readlineを使用してみましたが、それによって別のワックスのボールが開きました。

4

1 に答える 1

0

気にしないでください、私はこれで私の愚かさがどこにあるのかを発見しました。 row_index = 0CSV.parse ループの外にある必要があります。

于 2011-10-07T15:57:44.633 に答える