Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работы с массивом 
:(
    Опции темы
zsftp
Дата 5.4.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ruby начал изучать недавно.
В данный момент возник затык, никак немогу придумать даже алгоритм.

Имеется, к примеру, таблица биллинга вида:

Код

ipsrc            ipdst              bytes  psrc  pdst
217.65.6.13      192.168.1.8         7379     80 49736
217.65.6.13      192.168.1.8        42770     80 49736
217.65.6.13      192.168.1.8        31394     80 49736
217.65.6.13      192.168.1.8        32718     80 49736
192.168.1.8      217.65.6.13         1877  49736    80
192.168.1.8      217.65.6.13         4897  49736    80
192.168.1.8      217.65.6.13         4776  49736    80
192.168.1.8      217.65.6.13         5324  49736    80


Нужно скомпоновать ее по трафику, к виду:

Код

ipsrc            ipdst              bytes  psrc  pdst
217.65.6.13      192.168.1.8       114261     80 49736
192.168.1.8      217.65.6.13        16874  49736    80


PM MAIL   Вверх
shine
Дата 5.4.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Что вы имеете ввиду под 'скомпоновать по трафику'? Если оба IP совпадают И оба порта совпадают, то байты складываем. Так?
--------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin
PM MAIL   Вверх
zsftp
Дата 5.4.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, Вы правы.
Но я немогу придумать, в каком виде в языке это хранить. В виде массивов многомерных или иначе?

PM MAIL   Вверх
shine
Дата 5.4.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я бы делал массив в котором каждый элемент является хэшем (Hash):
Код

irb(main):001:0> k = Array.new
=> []
irb(main):002:0> k[k.length] = {'bytes' => 114_261, 'psrc' => 80}
=> {"bytes"=>114261, "psrc"=>80}
irb(main):003:0> k[k.length] = {'bytes' => 114_261, 'psrc' => 80}
=> {"bytes"=>114261, "psrc"=>80}
irb(main):004:0> k
=> [{"bytes"=>114261, "psrc"=>80}, {"bytes"=>114261, "psrc"=>80}]

В хэшах вы сможете использовать строковые переменные как ключи, а в массивах ключи могут быть только числами.
--------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin
PM MAIL   Вверх
zsftp
Дата 6.4.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А каким образом делать привязку к ip адресам?
PM MAIL   Вверх
shine
Дата 6.4.2008, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(zsftp @ 6.4.2008,  09:56)
А каким образом делать привязку к ip адресам?

Да точно так же. Добавьте еще одну пару ключ+значение. Ключем будет 'ipsrc' а значением какой-нибудь IP из вашей таблицы. Так можно расширять этот хэш сколько вам будет нужно. 

Общий смысл в том, что каждая строка в таблице будет соответствовать элементу массива, а каждое значение в этой строке будет хранится в ячейке хэша с ключем таким же, как и название столбца в таблице.
--------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin
PM MAIL   Вверх
popolzen
Дата 7.4.2008, 04:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 19.3.2006
Где: Улан-Удэ

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



Можешь попробовать сделать таким образом:

Код

regexp = /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\d+)\s+(\d+)\s+(\d+)$/

stats = Hash.new(0)

open('filename').read.scan(regexp) {|ipsrc, ipdst, bytes, psrc, pdst|
  stats[[ipsrc, ipdst, psrc, pdst]] += bytes.to_i
}


На выходе получаешь хэш, в котором ключами будет массив (ipsrc, ipdst, psrc, pdst), а значениями суммарный объем трафика.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

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

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


 




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


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

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