2011-10-06 2 views
0

ruby ​​1.9.2p290으로 레일즈 3.0.1을 실행하고 CSV를 사용하여 CSV 파일을 구문 분석하려고합니다 (CSV가 더 빠른 CSV 코드를 사용하고 있기 때문에 CSV를 사용하고 있습니다).CSV.parse가 행을 업데이트하지 않는 데 문제가 있습니다

나는

내가 csv 파일을 얻을 수 있습니다 (변경 등 대신 fasterCSV의 CSV에 필요) fasterCSV이 설정에 대한 멋진 작성자를 다음 만이 작동하도록하기 위해 사소한 변경을해야했다 계산 된 열의 정확한 수를 가진 테이블로로드 할 수 있지만 행 수에 상관없이 모든 행 하나입니다. 예를 들어, 내 csv 파일에 세 개의 행이있는 세 개의 행이있는 경우 import_table은 행 번호를 증가시키지 않고 세 번 0,1,2의 열 번호를 표시합니다. 그래서 그것은 내 CSV 파일의 각 행의 끝을 인식하지만 행 카운터를 증가시키지 않습니다. 나는 그것이 무엇을 놓치고 있는가?

  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 사용했지만, 그 왁스의 다른 공을 열었다 :

내 csvcontroller은 다음과 같습니다.

+0

신경 쓰지 마, 방금 나의 바보가 어디 있는지 발견했습니다. 'row_index = 0'는 CSV.parse 루프 외부에 있어야합니다. 좋아. 이제는 모두 잘됐다. 내가 이것을 할 수있게되면 나는 이것을 7 시간 더 응답으로 표시 할 것입니다. –

답변

0

Nevermind, 나는 방금 멍청이가 어디에 있는지 발견했습니다. row_index = 0은 CSV.parse 루프 외부에 있어야합니다.

관련 문제