Ruby将连接的数组元素拆分为单独的数组行并导出为CSV

时间:2016-05-11 16:10:34

标签: arrays ruby csv split

我正在尝试从CSV中拆分连接字段并将其添加到Ruby中的新行。以下是数据和所需输出的示例。

样本数据

Year    Make    Model
1999    Chevy   Camaro; Corvette; Cruz
2001    Ford    Mustang; Shelby; SHO

期望输出

Year    Make    Model
1999    Chevy   Camaro
1999    Chevy   Corvette
1999    Chevy   Cruz
2001    Ford    Mustang
2001    Ford    Shelby
2001    Ford    SHO

我的主要问题似乎来自CSV.foreach方法,该方法将每个csv数据行转换为单独的数组。如果我尝试拆分数组,我似乎无法创建一个新行,因为它逐行读取csv数据。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

怎么样?

require 'csv'

desired_array = []

CSV.foreach('myfile.csv', :headers => true) do |csv_obj|
  csv_obj["Model"].split(/;\s*/).each do |model|
    new_row = [csv_obj["Year"], csv_obj["Make"], model]
    desired_array.push(new_row)
  end
end

p desired_array

其中包含以下数组:

[
  ["1999", "Chevy", "Camaro"], 
  ["1999", "Chevy", "Corvette"], 
  ["1999", "Chevy", "Cruz"], 
  ["2001", "Ford", "Mustang"], 
  ["2001", "Ford", "Shelby"], 
  ["2001", "Ford", "SHO"]
]