2012-07-16 2 views
3

Ma question est similaire à this. Fondamentalement, il y a un fichier CSV, mais avec double PIDs, mais je ne peux pas le .uniq comme ceci:Suppression des doublons basés sur une colonne dans Ruby

File.open("new.csv", "w+") { |file| file.puts File.readlines("old.csv").uniq } 

puisque les lignes sont différentes. Je suis nouveau à Ruby et je me demandais s'il y avait une manière élégante d'enlever la ligne entière juste basée sur la première colonne? Ou dois-je passer par chaque ligne et chercher des PID en double?

Répondre

8

Vous pouvez passer un uniq un bloc pour spécifier sur quelle exigence il supprimera les éléments dupliqués.

File.open("old.csv", "w+") do |file| 
    file.puts File.readlines("csv.csv").uniq! { |s| s[/^\d+/ ] } 
end 

Comme expliqué dans le uniq documentation.

Remplacez l'expression régulière /^\d+/ par une personne qui vous convient.

+0

Merci, que tout résolu. – benaneesh

+0

Les lignes Csv peuvent s'étendre sur plusieurs lignes. Je recommande d'utiliser la bibliothèque csv à la place. – pguardiario

2

Disons que pid est la deuxième colonne:

CSV.open('new.csv', 'w') do |csv| 
    CSV.read('old.csv').uniq{|x| x[1]}.each do |row| 
    csv << row 
    end 
end 
Questions connexes