そのため、csv ファイルから指定された数のフィールドを削除する単純な Ruby スクリプトを作成しようとしています。まず、csv ファイルを配列に書き込んでから、その配列を delete_fields メソッドに渡します。フィールドの削除メソッドでは、すべての行のすべての列を繰り返し処理し、列が削除に必要なフィールドの範囲内にあるかどうかを確認します。現時点では、最初の 3 つのフィールドで動作しているように見え、その後 4 番目で停止します。
ここに私のコードがあります:
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 )
私が得るエラーは次のとおりです。
ryan@Alfred:~$ 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
どんな助けでも大歓迎です。