Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby “未定义的方法”;删除“在”处的“U”;试图从数组中删除字符串时_Ruby_Multidimensional Array_Nomethoderror - Fatal编程技术网

Ruby “未定义的方法”;删除“在”处的“U”;试图从数组中删除字符串时

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

因此,我试图创建一个简单的Ruby脚本,从csv文件中删除指定数量的字段。首先,我将csv文件写入一个数组,然后将该数组传递给delete_fields方法。在deletefields方法中,我迭代每行的每一列,检查该列是否在删除所需的字段范围内。目前,它似乎正在为前三个字段工作,然后在第四个字段挂起

这是我的密码:

    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小时后发布解决方案(新用户)我仍然有兴趣知道为什么这不起作用。