Ruby “未定义的方法”;删除“在”处的“U”;试图从数组中删除字符串时
因此,我试图创建一个简单的Ruby脚本,从csv文件中删除指定数量的字段。首先,我将csv文件写入一个数组,然后将该数组传递给delete_fields方法。在deletefields方法中,我迭代每行的每一列,检查该列是否在删除所需的字段范围内。目前,它似乎正在为前三个字段工作,然后在第四个字段挂起 这是我的密码:Ruby “未定义的方法”;删除“在”处的“U”;试图从数组中删除字符串时,ruby,multidimensional-array,nomethoderror,Ruby,Multidimensional Array,Nomethoderror,因此,我试图创建一个简单的Ruby脚本,从csv文件中删除指定数量的字段。首先,我将csv文件写入一个数组,然后将该数组传递给delete_fields方法。在deletefields方法中,我迭代每行的每一列,检查该列是否在删除所需的字段范围内。目前,它似乎正在为前三个字段工作,然后在第四个字段挂起 这是我的密码: require 'csv' def read_csv( csv_file ) arr_of_records = CSV.read( csv_file
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 )
非常感谢您的帮助。您之所以会遇到此错误,是因为您在
字符串类型的对象上调用delete\u,而不是数组。您真正想要做的是在当前迭代的行上调用delete\u,而不是在列中调用。这将解决您的问题:
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
csv_数组。每个_都有_索引do |行,行i |
行。每个_带有_索引do |列,列_i |
如果((第i列>=开始字段)和(column_i出现此错误是因为您正在对类型为String
的对象调用delete_at
,而不是Array
。您真正想做的是在当前迭代的行而不是列上调用delete_at
。这应该可以解决您的问题:
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
csv_数组。每个_都有_索引do |行,行i |
行。每个_带有_索引do |列,列_i |
row.delete_at(column_i)if((column_i>=start_field)和&(column_i)我已使用带有范围参数的slice!方法工作。将在7小时后发布解决方案(新用户)仍有兴趣知道为什么不起作用。我已使用带有范围参数的slice!方法工作。将在7小时后发布解决方案(新用户)我仍然有兴趣知道为什么这不起作用。