简体   繁体   English

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

[英]Ruby split concatenated array element into separate array row and export to CSV

I am trying to split a concatenated field from a CSV and add it to a new row in Ruby.我正在尝试从 CSV 中拆分一个串联字段并将其添加到 Ruby 中的新行。 Here is an example of the data and desired output.这是数据和所需输出的示例。

Sample Data样本数据

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

Desired Output期望输出

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

My main issue seems to come from the CSV.foreach method which turns each csv row of data into a separate array.我的主要问题似乎来自 CSV.foreach 方法,它将每个 csv 数据行转换为一个单独的数组。 If I try to split the array I cannot seem to get it to create a new row as it reads the csv data line by line.如果我尝试拆分数组,我似乎无法让它创建一个新行,因为它逐行读取 csv 数据。 Any help would be greatly appreciated.任何帮助将不胜感激。

What about that ?那个怎么样 ?

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

Which gives the following array :这给出了以下数组:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM