Home > Mobile >  ruby - create CSV::Table from 2d array
ruby - create CSV::Table from 2d array

Time:04-24

I have a 2D array... is their any way to create CSV::Table with first row considered as headers and assuming all rows has same number of headers.

CodePudding user response:

Below is the basic example to create CSV file in ruby:

hash = {a: [1, 2, 3], b: [4, 5, 6]}

require 'csv' 
CSV.open("my_file.csv", "wb") do |csv|
  csv << %w(header1 header2 header3)
  hash.each_value do |array|
    csv << array
  end
end

@diwanshu-tyagi will this help to resolve your question? if not please add example of your input value, I'll update this answer.

Thanks

CodePudding user response:

You can create a CSV::Table object with headers from a 2D array using CSV.parse.

First convert your 2d array to a string where the values in each row are joined by a comma, and each row is joined by a newline, then pass that string to CSV.parse along with the headers: true option

require 'csv'

sample_array = [
    ["column1", "column2", "column3"],
    ["r1c1", "r1c2", "r1c3"],
    ["r2c1", "r2c2", "r2c3"],
    ["r3c1", "r3c2", "r3c3"],
]

csv_data = sample_array.map {_1.join(",")}.join("\n")
table = CSV.parse(csv_data, headers: true)

p table
p table.headers
p table[0]
p table[1]
p table[2]

=>

#<CSV::Table mode:col_or_row row_count:4>
["column1", "column2", "column3"]
#<CSV::Row "column1":"r1c1" "column2":"r1c2" "column3":"r1c3">
#<CSV::Row "column1":"r2c1" "column2":"r2c2" "column3":"r2c3">
#<CSV::Row "column1":"r3c1" "column2":"r3c2" "column3":"r3c3">
  • Related