Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 如何改进循环中CSV列的提取_Ruby_Csv - Fatal编程技术网

Ruby 如何改进循环中CSV列的提取

Ruby 如何改进循环中CSV列的提取,ruby,csv,Ruby,Csv,我正在编写一个脚本,从CSV中提取数据,然后将其发送到API 所以我有一节课 class Output < Struct.new(:sid, :pid, :rut, :name, :surname) end 它是有效的。但我的问题是,是否有更有效的方法 我是ruby新手,因此非常感谢您的帮助。Struct子类构造函数接受位置参数: c = Output.new(data[0], data[1], data[2], data[3], data[4]) 以上表达式可以用splat运

我正在编写一个脚本,从CSV中提取数据,然后将其发送到API

所以我有一节课

class Output <
    Struct.new(:sid, :pid, :rut, :name, :surname)
end
它是有效的。但我的问题是,是否有更有效的方法


我是ruby新手,因此非常感谢您的帮助。

Struct
子类构造函数接受位置参数:

c = Output.new(data[0], data[1], data[2], data[3], data[4])
以上表达式可以用splat运算符(
*
)更简短地表示:


与:


Struct
子类构造函数接受位置参数:

c = Output.new(data[0], data[1], data[2], data[3], data[4])
以上表达式可以用splat运算符(
*
)更简短地表示:


与:


您还可以使用数组#collect执行相同的功能

file.each_line do |row|  
    data = row.split(";").collect { |x| x == '' ? 'Sin datos' : x }  
    c = Output.new(*data)  
end

您还可以使用数组#collect执行相同的功能

file.each_line do |row|  
    data = row.split(";").collect { |x| x == '' ? 'Sin datos' : x }  
    c = Output.new(*data)  
end

太棒了,但我如何才能将
c.lasname
data[4]
链接起来,如我的问题所示?@ignaces,如我在回答中所示,
c=Output.new(*data)
。如果您愿意,您也可以在之后指定:
c.lasname=data[4]
非常好,但是如何将
c.lasname
data[4]
链接,如我的问题所示?@ignaces,如我在回答中所示,
c=Output.new(*data)
。如果需要,您也可以在之后进行分配:
c.lasname=data[4]
file.each_line do |row|  
    data = row.split(";").collect { |x| x == '' ? 'Sin datos' : x }  
    c = Output.new(*data)  
end