Ruby - создать CSV::Table из 2d массива

У меня есть 2D-массив... это любой способ создать CSV::Table с первой строкой, рассматриваемой как заголовки, и предполагая, что все строки имеют одинаковое количество заголовков.

Документация Ruby показывает, что CSV.new имеет необязательный параметр для указания заголовков.

radarbob 23.04.2022 19:28
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
1
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ниже приведен базовый пример создания CSV-файла в 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 поможет ли это решить ваш вопрос? если нет, пожалуйста, добавьте пример вашего входного значения, я обновлю этот ответ.

Спасибо

это первый метод, о котором я думаю... но мне нужен объект CSV::Table без создания или сохранения файла в памяти. Метод CSV.parse подходит для этой работы

Diwanshu Tyagi 25.04.2022 06:52

Хорошо @DiwanshuTyagi

Chetan Tete 25.04.2022 10:38
Ответ принят как подходящий

Вы можете создать объект CSV::Table с заголовками из 2D-массива, используя CSV.parse.

Сначала преобразуйте свой 2d-массив в строку, в которой значения в каждой строке соединяются запятой, а каждая строка объединяется новой строкой, а затем передайте эту строку в CSV.parse вместе с опцией headers: true

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">

CSV.parse делает работу, спасибо, чувак.... Ценю помощь

Diwanshu Tyagi 25.04.2022 06:51

Другие вопросы по теме