Найти конкретную строку в CSV и обновить определенное значение в CSV для найденной строки, используя Ruby - PullRequest
0 голосов
/ 10 мая 2018

У меня есть файл CSV, который я анализирую, когда пытаюсь найти определенную строку и обновить в ней определенный столбец.До сих пор я был в состоянии выполнить запрос ниже, чтобы найти конкретные строки, которые я хочу обновить.Но я не знаю, как обновить CSV после этого.

Пока у меня есть:

csv = CSV.parse(csv_table, :headers => true)

get_persons.each do |person|
  record = csv.find{ |row| row['Email'] == person.email }
  puts record[5]
end

Я могу найти строки, которые я хочу обновить из CSV, нопроблема, на которой я застрял и не могу найти никакой помощи, заключается в том, как мне затем обновить столбец для найденной строки (в частности, столбец 6 = запись [5]) и добавить его обратно в CSV, чтобы он обновлялся?

Любая помощь будет отличной, спасибо!

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Чтобы обновить содержимое, откройте другой файл в режиме записи и поместите туда обновленное содержимое.

CSV.open("write.csv", "wb") do |csv_write|
  CSV.foreach("read.csv") do |row|
     if row['Email'] == "email"
        row[5] = "new email"
     end
     csv_write << row 
  end
end

CSV.parse загрузит все содержимое в память.Если вы читаете большие файлы, обратитесь к https://dalibornasevic.com/posts/68-processing-large-csv-files-with-ruby

0 голосов
/ 10 мая 2018

Этот способ будет работать для вас?

csv = CSV.parse(csv_table, :headers => true)

get_persons.each do |person|
  record = csv.find do |row| 
    if row['Email'] == person.email 
       row['...'] = 'new_information'
    end
  end  
end

CSV.open("file.csv", "wb") do |new_csv|
  csv.each do |row|
    new_csv << row
  end
end     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...