/ / Lecture d’un fichier CSV dans Ruby à l’aide de Sequel et des gemmes SQLite3 - ruby, csv, sqlite3, suite ,easedcsv

Lecture d’un fichier CSV dans Ruby à l’aide de Sequel et des gemmes SQLite3 - ruby, csv, sqlite3, suite ,easedcsv

J'ai besoin de lire les données de deux fichiers CSV et de les chargerles dans SQLite3 dans deux tables différentes. Je souhaite ensuite interroger les deux tables et créer un nouvel ensemble de données devant être exporté dans un nouveau fichier CSV / Excel. Quelle serait la meilleure façon de s'y prendre?

Je pense à une combinaison de SQLite3, Sequel et FasterCSV.

Il existe également une gemme CSV2SQLite, mais je ne suis pas sûre de l’utiliser.

En outre, si quelqu'un avait des extraits de code, ce serait vraiment apprécié.

Réponses:

1 pour la réponse № 1
require "csv"

csv_file_1 = CSV.read("/home/user/Desktop/first_file_1.csv")
csv_file_2 = CSV.read("/home/user/Desktop/first_file_2.csv")

csv_file_1[0][0] = ["name", "phone"] #ect

#
# logic goes here to work with your csv files
#

require "sequel"
DB = Sequel.sqlite("/home/user/Desktop/csv.db")

DB.create_table :people do
primary_key :id
String :name
String :phone
end

database = DB[:people]


database.insert(:name => "duck", :phone => "867-5309")

#logic goes here to insert/sort/manipulate your CSV files.

BOOM lit des fichiers csv et crée un tableau avec une suite ruby ​​gem.


0 pour la réponse № 2

J'utilise un autre extrait de code:

def import_csv(tabname, data)
csv = CSV.parse(data, :headers=> true, :header_converters => :symbol )
DB.create_table(tabname){
primary_key :id
csv.headers.each{|col|
String col
}
}
p csv.headers
DB[tabname].multi_insert(csv.map {|row| row.to_h})
#~ csv.each{|row|
#~ DB[tabname].insert(row.to_h)
#~ }
end

Il lit les données CSV et crée une colonne de table en-têtes CSV (sous forme de chaînes). Ensuite, toutes les données sont copiées dans la table.

Un exemple complet:

#encoding: utf-8
=begin
=end
require "sequel"
require "csv"
Sequel.extension :pretty_table  #Sequel::PrettyTable.print()/Sequel::PrettyTable.string()
=begin
Test data
=end
DB = Sequel.sqlite

def import_csv(tabname, data)
csv = CSV.parse(data, :headers=> true, :header_converters => :symbol )
DB.create_table(tabname){
primary_key :id
csv.headers.each{|col|
String col
}
}
p csv.headers
DB[tabname].multi_insert(csv.map {|row| row.to_h})
#~ csv.each{|row|
#~ DB[tabname].insert(row.to_h)
#~ }
end

import_csv(:tab1, DATA.read)

DB.tables.each{|table|
puts table
Sequel::PrettyTable.print(DB[table])
}

#~ Sequel::PrettyTable.print(DB[:mytables].filter(Sequel.like(:a, "a%")))
__END__
a,b,c,d,e
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5