csv

Post on 18-Nov-2014

156 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Un retour d'expérience sur comment traiter des fichiers CSV. C'est simple et basique, mais c'est mieux en le disant.

TRANSCRIPT

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

top related