Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ruby CSV merge rows, проблемы с кодом 
:(
    Опции темы
arthur1981
Дата 31.8.2014, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 31.8.2014

Репутация: нет
Всего: нет



Добрый день! Может кто знает как соединить ряды (rows) CSV файла на руби вот по такому принципу
Я ввожу CSV фаил с такой таблицей:
---url1---------|------url2-----  ---|---date visited-|------time visited---|----ip from-----|-links cliked 
myhome.com|--friendhome.com|---16/02/10---|-----------------------|-----------------|-------------- 
myhome.com|--friendhome.com|------------------|--------12.45-------|-192.168.1.1-|-------------- 
myhome.com|--friendhome.com|------------------|-----------------------|-----------------|-link1-------
someone.com|--bigimot.com---- |----13/10/14--|-----------------------|-----------------|--link2
someone.com|--bigimot.com-----|------------------|----11.15---------  -|--199.168.1.1|--------------

Вот что должно получится:

---url1----------|------url2-----------|-date visited--|------time visited---|----ip from-------|-links cliked 
--myhome.com|--friendhome.com|-16/02/10----|--------12.45--------|-192.168.1.1-- |--link1-------
--someone.com|--bigimot.com-----|-13/10/14----|--------11.15--------|--199.168.1.1-|--link2----

Тоесть код должен находить пару (url1 и url2) комбинация которых повторяется в таблице больше одного раза и по этой паре собрать информацию об этой паре в один ряд и удалить повторяющиеся ряды, информация по каждой паре (url1 и url2) уже уникальна просто разбросанна по разным рядам.
 
Вот мой код
Код

require 'csv'
 
def merge_csv_rows(orig_file, merged_file, keys)
  rows = Hash.new { |h, k| h[k] = Hash.new }
 
  CSV.open orig_file, 'r', headers: true, col_sep: ?;, :quote_char => "\x00" do |orig|
    orig.each do |row|
      key = row.values_at(*keys)
   values = row.to_hash.reject {|k,v| v.nil? }
   
    rows[key].merge!values.to_hash #do |_,old, new|
    end
    CSV.open merged_file, 'w', headers: orig.headers, write_headers: true do |merged|
      rows.each do |key, values|
        fields = orig.headers.map do |header|
          if  keys.include? header
            key[keys.index header]
          else
            values[header]
          end
        end
      puts fields
        merged << (CSV::Row.new orig.headers, fields)
      end
    end
  end

 
В моем варианте кода ошибка - получаю фаил с хидерами и с данными но тоже только один ряд, на пример если должно получится:
url1------------|------url2------------|---date visited----|------time visited---|----ip from-----|-links cliked 
myhome.com--|--friendhome.com--|---16/02/10-------|--------12.45------|-192.168.1.1-|--link1-------
someone.com--|--bigimot.com------|----13/10/14------|--------11.15-------|--199.168.1.1|--link2----

То я получаю только:
url1-----------|------url2-----------|---date visited|------time visited---|----ip from-----|-links cliked 
myhome.com|--friendhome.com|---16/02/10--|--------12.45-------|192.168.1.1-- |--link1-------
 
Кто может помогите пожалуйста!!!
Благодарю всех за помощь!!!



Это сообщение отредактировал(а) arthur1981 - 31.8.2014, 22:39
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0927 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.