0

我正在使用 ruby​​ 1.9.2p290 运行 rails 3.0.1 并尝试使用 CSV 解析 CSV 文件(据我了解,CSV 现在使用的是 fasterCSV 代码)。

我正在关注一篇关于为 fastCSV 设置它的好文章,只需要进行微小的更改即可使其正常工作(将要求更改为 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,但这又打开了另一个蜡球。

4

1 回答 1

0

没关系,我刚刚发现我的白痴在哪里。 row_index = 0需要在 CSV.parse 循环之外。

于 2011-10-07T15:57:44.633 回答