Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je suis administrateur réseau au sein de mon entreprise, on m'a donc demandé de créer une moulinette afin de comparer deux fichier CSV et recuperer la différence entre les deux fichiers dans un troisième fichier pour que celui soit importé dans un logiciel.
Etant débutant en ruby et en programmation pour des besoins personnels, j'ai souhaité le faire dans ce langage car cela serait un bon exercice. Mais voila le code que j'ai reussit à récupérer ne me donne pas le résultat que je veux.
ci-dessous mon code:

# -*- coding: utf-8 -*-
require 'csv'

csv_sami = File.read('sami.csv')
csv_loupe = File.read('loupe.csv')

csv1 = CSV.parse(csv_sami, :headers => true, :col_sep => ";")
csv2 = CSV.parse(csv_loupe, :headers => true, :col_sep => ";")

CSV.open("csv_out.csv", "wb") do |csv|
  csv2.each do |row1|
    i = 0
    csv1.each do |row|
      if (row['Exercice'] == row1['exercice'] && row['SIREN'] == row1['siren_adhérent'])
        i = 1
        break
      end
    end
    if i == 0
      csv << row1
    end
 end
end

Ce que je veux

Je voudrai que csv_out.csv contienne les lignes en trop de CSV2

Ce que j'obtiens

Alors qu'en executant ce code, j'obtiens bien le fichier csv_out.csv mais sans traitement, le fichier contient tout le contenu du fichier csv2
Je vous remercie d'avance pour votre aide car je bloque un peu

1 réponse


Bonsoir,

Voici ce que moi je ferai :

# -*- coding: utf-8 -*-
require 'csv'

# On met le fichier sami.csv et loupe.csv dans des variables qui seront de types array
csv_sami = CSV.read('sami.csv')
csv_loupe = CSV.read('loupe.csv')

#On compare les deux arrays
diff = csv_sami - csv_loupe

#On affiche le diff
puts diff

# On créé le troisieme fichier qui contient la différence
IO.write('name-diff.csv', diff.map(&:to_csv).join)

Cordialement