Upload
nicolas-ledez
View
156
Download
0
Embed Size (px)
DESCRIPTION
Un retour d'expérience sur comment traiter des fichiers CSV. C'est simple et basique, mais c'est mieux en le disant.
Citation preview
TOI AUSSI TRAITE DU CSV AVEC TON RUBY
Un retour d'expérience
NICOLAS LEDEZ
Orange Business Services / IT&L@bs
DevCamp Rennes
Rennes On Rails
Rennes DevOps
Graphotec Cloud
J'AI :
Un fichier CSV de 600 lignes
Une cible de 100 fichiers XML
CHOIX DES ARMES
À la main
Macro VBA Excel
Perl
Python
Ruby
TDD 1/4
TDD 2/4
TDD 3/4
TDD 4/4
POUR COMMENCER
def parse_csv(filename) @list = {}
lines = File.open(filename).readlines lines[1..-1].each { |line| (fullname, login) = line.chomp.split(";")
MAIS...
def parse_csv(filename) @list = {}
lines = File.open(filename).readlines lines[1..-1].each { |line| (firstname, lastname, login) = line.chomp.split(";")
1 AN PLUS TARD
+----------------------+-------+-------+---------+---------+-----+-------+| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |+----------------------+-------+-------+---------+---------+-----+-------+| Libraries | 446 | 356 | 6 | 19 | 3 | 16 || spec/vsabuilder | 484 | 388 | 0 | 38 | 0 | 8 |+----------------------+-------+-------+---------+---------+-----+-------+
Code LOC: 356 Test LOC: 388 Code to Test Ratio: 1:1.1
L'AGILITÉC'est aussi savoir tout casser
UTILISER UNE LIB !
def parse(csv_filename, key) key_symbol = key.to_sym CSV.foreach(csv_filename, :col_sep =>';', :headers =>
true, :header_converters => :symbol) do |line| current_key = line[key_symbol] @content[current_key] = line endend
3 JOURS APRÈS
+----------------------+-------+-------+---------+---------+-----+-------+| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |+----------------------+-------+-------+---------+---------+-----+-------+| Libraries | 58 | 48 | 2 | 7 | 3 | 4 || spec/lib | 157 | 122 | 0 | 6 | 0 | 18 |+----------------------+-------+-------+---------+---------+-----+-------+
Code LOC: 48 Test LOC: 122 Code to Test Ratio: 1:2.5
Rappel :+----------------------+-------+-------+---------+---------+-----+-------+| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |+----------------------+-------+-------+---------+---------+-----+-------+| Libraries | 446 | 356 | 6 | 19 | 3 | 16 || spec/vsabuilder | 484 | 388 | 0 | 38 | 0 | 8 |+----------------------+-------+-------+---------+---------+-----+-------+
Code LOC: 356 Test LOC: 388 Code to Test Ratio: 1:1.1
SOURCES
https://github.com/nledez/csv2other
CONCLUSION
@NLEDEZ