Skip to content

Instantly share code, notes, and snippets.

@lucivaldo
Created March 5, 2024 11:30
Show Gist options
  • Save lucivaldo/a618a74d025458d9102a0c580dc1d5e1 to your computer and use it in GitHub Desktop.
Save lucivaldo/a618a74d025458d9102a0c580dc1d5e1 to your computer and use it in GitHub Desktop.
Classe Ruby simples para gerar arquivos CSV de maneira mais dinâmica
require 'csv'
class CSVBuilder
def initialize
@columns = []
@data = []
end
def add_column(column_name)
@columns << column_name
end
def remove_column(column_name)
@columns.delete(column_name)
@data.each { |row| row.delete(column_name) }
end
def add_row(row_data)
@data << row_data
end
def export_csv(file_name)
CSV.open(file_name, 'w') do |csv|
csv << @columns
@data.each do |row|
csv << @columns.map { |column| row[column] }
end
end
end
end
# Exemplo de uso
csv_builder = CSVBuilder.new
csv_builder.add_column('Nome')
csv_builder.add_column('Idade')
csv_builder.add_column('Cidade')
csv_builder.add_row({ 'Nome' => 'João', 'Idade' => 30, 'Cidade' => 'São Paulo' })
csv_builder.add_row({ 'Nome' => 'Maria', 'Idade' => 25, 'Cidade' => 'Rio de Janeiro' })
csv_builder.export_csv('output.csv')
# Remover uma coluna
csv_builder.remove_column('Cidade')
# Adicionar uma nova linha
csv_builder.add_row({ 'Nome' => 'Pedro', 'Idade' => 35 })
# Exportar o CSV novamente
csv_builder.export_csv('output_modificado.csv')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment