Разобрать уникальные значения из CSV - PullRequest
0 голосов
/ 14 сентября 2018

у меня file.csv:

user,name
1,Jim
1,Jim
2,Michael
3,Scott
4,Dwight
4,Dwight
5,Pam

Я просто хочу одну из уникальных записей из файла, а затем импортировать ее. Я желаю:

user,name
1,Jim
2,Michael
3,Scott
4,Dwight
5,Pam

Я могу проанализировать CSV и импортировать его в свою базу данных.

CSV.foreach("file.csv", :headers => true).each do |row|
  # do stuff to ignore dupes

  # doing stuff to import to db
end

Я предполагаю, что мне нужно отслеживать идентификаторы, когда я анализирую, но я не уверен, каким будет следующий шаг.

Ответы [ 4 ]

0 голосов
/ 17 сентября 2018

Я понял это, учитывая мою проблему. Возможно, это не лучшая практика, но, похоже, это работает для того, что мне нужно.

previous_user = nil

CSV.foreach("file.csv", :headers => true).each do |row|
  # do stuff to ignore dupes
  current_user = row['user']

  next if current_user == previous_user

  # doing stuff to import to db
  previous_user = current_user
end
0 голосов
/ 14 сентября 2018

Когда я вижу такое задание, я всегда задаюсь вопросом, почему ради Бога нужно злоупотреблять CSV здесь?

input = 'user,name
1,Jim
1,Jim
2,Michael
3,Scott
4,Dwight
4,Dwight
5,Pam'
#⇒ "user,name\n1,Jim\n1,Jim\n2,Michael\n3,Scott\n4,Dwight\n4,Dwight\n5,Pam"
input.split[1..-1].map { |line| line.split(',').last }.uniq
#⇒ ["Jim", "Michael", "Scott", "Dwight", "Pam"]

или с индексами:

input.split[1..-1].uniq
#⇒ ["1,Jim", "2,Michael", "3,Scott", "4,Dwight", "5,Pam"]
0 голосов
/ 14 сентября 2018

Я не уверен, что вы действительно можете разобрать в самом начале. Но да, есть решение вашей проблемы

  1. Чтение файла CSV
  2. Изменить csvData на формат массива
  3. Примените уникальное свойство массива, которое удалит дубликат.

    require 'csv'
    csvData = CSV.read('./fileName.csv', :headers => true)
    csvData.to_a.uniq!
    

Теперь вы можете уникальные значения без изменения исходного файла

0 голосов
/ 14 сентября 2018

можно попробовать:

CSV.read("file.csv", :headers => true).uniq(&:last).each do |row|
   print row
end

вывод:

1,Jim
2,Michael
3,Scott
4,Dwight
5,Pam
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...