2012-09-25 1 views
1

그래서 csv 파일에서 지정된 수의 입력란을 제거하는 간단한 Ruby 스크립트를 만들려고합니다. 먼저 배열에 csv 파일을 쓰고 그 배열을 delete_fields 메서드에 전달합니다. 필드 삭제 메서드에서 모든 행의 모든 ​​열을 반복하고 열이 삭제에 필요한 필드 범위 사이에 있는지 확인합니다. 지금은 처음 세 분야에서 일하는 것 같고 4 일에 걸립니다.배열에서 문자열을 삭제하려고 시도하는 동안 정의되지 않은 메서드 "delete_at"

다음과
require 'csv' 
    def read_csv(csv_file) 

     arr_of_records = CSV.read(csv_file) 


     return arr_of_records 
    end 

    def remove_fields (csv_array, new_csv_file, start_field, end_field) 
     #file = File.new(new_csv_file, "w") 

     csv_array.each_with_index do |row, row_i | 
     row.each_with_index do |column, column_i| 

     column.delete_at(column_i) if ((column_i >= start_field) && (column_i <=  end_field)) 
     puts column 

     end 
     end 
    end 


    remove_fields(read_csv(ARGV[0]), ARGV[1], ARGV[2].to_i, ARGV[3].to_i) 

내가 오류가 될 때 :

[email protected]:~$ ruby csv_read.rb test_data.csv altered_test_data.csv 3 8 
    8 
    ? 
    ? 
    csv_read.rb:16:in `remove_fields': undefined method `delete_at' for "Lakewoodcity":CSV::Cell (NoMethodError) 
from csv_read.rb:1:in `each_with_index' 
from csv_read.rb:14:in `each' 
from csv_read.rb:14:in `each_with_index' 
from csv_read.rb:14:in `remove_fields' 
from csv_read.rb:1:in `each_with_index' 
from csv_read.rb:13:in `each' 
from csv_read.rb:13:in `each_with_index' 
from csv_read.rb:13:in `remove_fields' 
from csv_read.rb:24 

어떤 도움이 많이 감사

여기 내 코드입니다.

+0

슬라이스를 사용하여 작업하고 있습니다! 메서드를 사용하여 범위 매개 변수를 지정합니다. 7 시간 안에 솔루션을 게시 할 것인가 (신규 사용자) 여전히 이것이 작동하지 않는 이유를 알고 싶어합니다. – ryanVincent

답변

0

Array 대신 유형의 객체에서 delete_at을 호출하기 때문에이 오류가 발생합니다. 지금하고 싶은 것은 에 delete_at으로 전화하십시오. 현재 column이 아니라 반복 중입니다. 이 대신 rowvalue로 첫 번째 블록 매개 변수를 생각하는 것입니다 이해에 도움이

csv_array.each_with_index do |row, row_i | 
    row.each_with_index do |column, column_i| 

    row.delete_at(column_i) if ((column_i >= start_field) && (column_i <=  end_field)) 
    puts column 

    end 
    end 

뭔가 :이 문제를 해결해야한다.