Ruby 如何改进循环中CSV列的提取
我正在编写一个脚本,从CSV中提取数据,然后将其发送到API 所以我有一节课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运
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