Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: gsm шлюз  (Прочитано 18518 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 08-09-2007 14:21 » 

джсм шлюз:

допустим есть файл вида:
Цитата
                                                         

       Лист N    6
              Приложение к счету за услуги связи за май

2007 года               
05/06/2007  Л.счет  - 11111                             

    Телефон - 1234567
--------------------------------------------------------

-----------------------
:Дата:Время:Пач.:КО:          Наименование услуги       

     :КТУ:Прд: Сумма :
:    :(мск):    :  :                                     

     :   :   :       :
--------------------------------------------------------

-----------------------
02.05  7.32     225 90580 "Вос-ЗапТелек." Сверд.об       

      22   23    34.50
02.05  8.02     225 92210 "Урал.ДжиЭсЭм" Свердл.обл     

      22    5     7.50
02.05  8.13     205 902263 "Уралсвязьинформ" Свер.об     

      22    1     1.50
02.05  8.44     225 92211 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50
02.05  8.46     225 91261 "Моб.ТелеСист." Свердл.об     

      22    1     1.50
02.05  9.04     225 92222 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50
02.05 10.01     205 90454 "Екатеринбург-2000" Св.об     

      22    1     1.50
02.05 10.58     225 91224 "Моб.ТелеСист." Свердл.об     

      22   22    33.00
02.05 11.56     225 92222 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50
02.05 12.54     225 90580 "Вос-ЗапТелек." Сверд.об       

      22    1     1.50
02.05 13.37     225 34392 Первоуральск Свердл.обл       

      22   14    32.20
02.05 14.33     205 90287 "Екатеринбург-2000" Св.об     

      22    8    12.00
02.05 14.41     225 92210 "Урал.ДжиЭсЭм" Свердл.обл     

      22    2     3.00
02.05 15.13     225 91266 "Моб.ТелеСист." Свердл.об     

      22    4     6.00
02.05 16.43     225 91223 "Моб.ТелеСист." Свердл.об     

      22    1     1.50
03.05  8.45     225 92222 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50
03.05 10.52     225 90680 "Вос-ЗапТелек." Сверд.об       

      22    2     3.00
03.05 11.46     225 92222 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50
03.05 11.57     225 91222 "Моб.ТелеСист." Свердл.об     

      22    1     1.50
03.05 12.17     225 34392 Первоуральск Свердл.обл       

      22    7    16.10
03.05 13.18     205 902266 "Уралсвязьинформ" Свер.об     

      22    2     3.00
03.05 13.37     225 901201 "Уралвестком" Свердлов.об     

      22    2     3.00
03.05 14.31     225 92221 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50

--------------------------------------------------------

-----------------------
Итого по телефону 1234567 начислено:    количество   

225 на сумму      1009.66
--------------------------------------------------------

-----------------------
                                                         

          Лист N    7
              Приложение к счету за услуги связи за май

2007 года               
05/06/2007  Л.счет  - 11111                             

    Телефон - 1234568
--------------------------------------------------------

-----------------------
:Дата:Время:Пач.:КО:          Наименование услуги       

     :КТУ:Прд: Сумма :
:    :(мск):    :  :                                     

     :   :   :       :
--------------------------------------------------------

-----------------------
02.05  7.16     205 90438 "Екатеринбург-2000" Св.об     

      22    5     7.50
02.05  7.21     225 91266 "Моб.ТелеСист." Свердл.об     

      22    3     4.50
02.05  7.26     225 906810 "Вос-ЗапТелек." Сверд.об     

      22    1     1.50
02.05  9.19     225 90580 "Вос-ЗапТелек." Сверд.об       

      22    8    12.00
02.05  9.58     225 90680 "Вос-ЗапТелек." Сверд.об       

      22    1     1.50
02.05 10.02     205 902263 "Уралсвязьинформ" Свер.об     

      22    1     1.50
02.05 10.11     225 92222 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50
02.05 11.16     225 92211 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50
02.05 11.33     205 90438 "Екатеринбург-2000" Св.об     

      22    3     4.50
02.05 12.05     225 92211 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50
02.05 12.21     225 91222 "Моб.ТелеСист." Свердл.об     

      22    4     6.00
02.05 15.37     225 92210 "Урал.ДжиЭсЭм" Свердл.обл     

      22    2     3.00
03.05  6.52     225 92210 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50
03.05  7.16     225 91224 "Моб.ТелеСист." Свердл.об     

      22    2     3.00
03.05  8.43     225 92211 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50
03.05  9.02     225 34354 Нижний Тагил Свердл.обл       

      22    6    19.38
03.05  9.15     225 34354 Нижний Тагил Свердл.обл       

      22    2     6.46
03.05 10.54     225 906810 "Вос-ЗапТелек." Сверд.об     

      22    2     3.00
03.05 11.31     205 90287 "Екатеринбург-2000" Св.об     

      22   15    22.50
03.05 12.48     225 34370 Новоуральск Свердл.обл         

      22    3     6.90
03.05 14.03     225 34392 Первоуральск Свердл.обл       

      22    1     2.30
03.05 14.15     225 34370 Новоуральск Свердл.обл         

      22    3     6.90
04.05  7.43     225 91222 "Моб.ТелеСист." Свердл.об     

      22    1     1.50
04.05  8.44     225 92211 "Урал.ДжиЭсЭм" Свердл.обл     

      22    4     6.00
04.05  8.54     225 34370 Новоуральск Свердл.обл         

      22    4     9.20
04.05  9.09     225 91223 "Моб.ТелеСист." Свердл.об     

      22    1     1.50
04.05  9.29     225 34345 Верхняя Салда Свердл.обл       

      22    7    22.61
04.05  9.59     225 34393 Каменск-Уральский Свердл.     

      22    1     2.30
04.05 13.01     225 92222 "Урал.ДжиЭсЭм" Свердл.обл     

      22    2     3.00
04.05 14.48     225 92210 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50
04.05 15.16     225 92215 "Урал.ДжиЭсЭм" Свердл.обл     

      22    1     1.50
04.05 15.32     205 90454 "Екатеринбург-2000" Св.об     

      22    4     6.00
04.05 17.05     205 90863 "Екатеринбург-2000" Св.об     

      22    1     1.50
--------------------------------------------------------

-----------------------
Итого по телефону 1234568 начислено:    количество   

195 на сумму       922.85
--------------------------------------------------------

-----------------------

и тд

для комерческого обоснования и расчета окупаемости gsm

шлюза, нада выцепить из этого файла одновременные звонки

на сотовые телефоны с разных телефонов

на чем лучше парсить?

каким алгоритмом лучше пользоваться?

какова временная сложность алгоритма парсинга?

на каком количестве звонков он благополучно загнется?



думаю об awk+pgsql ....

или может стоит попробовать хаскель, окалм или схеме?

Записан

1n c0de we trust
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 09-09-2007 11:53 » 

Думаю, что следует все слить в базу данных, отиндексировать по префиксу (и времени) и не пар(с)иться.
« Последнее редактирование: 09-09-2007 11:56 от Oldy » Записан

С уважением, Oldy.
Mayor
Специалист

ru
Offline Offline

« Ответ #2 : 10-09-2007 14:53 » 

Думаю, что следует все слить в базу данных, отиндексировать по префиксу (и времени) и не пар(с)иться.

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

Записан

1n c0de we trust
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 10-09-2007 15:24 » 

листинг с фиксированной шириной столбца
Код:
поле1 поле2  поле3  поле4   поле5                           поле6    поле7 поле8
02.05 7.32   225    90580   "Вос-ЗапТелек." Сверд.об        22       23    34.50

далее пишем "парсер"
Код:
открыть файл
цикл до конца файла
  прочитать строку
  разбить строку по полям
  сложить в массив
  загрузить в базу
конец цикла

CREATE TABLE tarifics ( поле1 ТИППОЛЯ, ....., поле4 INTEGER NOT NULL UNIQUE PRIMARY KEY, ....)

загрузить в базу

вставка по одной записи
INSERT INTO trafics   VALUES (масси
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 10-09-2007 18:08 » 

спешу исправиться
CREATE TABLE tarifics ( поле1 ТИППОЛЯ, ....., поле4 INTEGER NOT NULL UNIQUE PRIMARY KEY, ....)
CREATE TABLE tarifics ( поле1 ТИППОЛЯ, ....., поле4 ТИППОЛЯ, ....)
CREATE UNIQUE INDEX имяиндекса on tarifics (поле4)
или
CREATE имяиндекса on tarifics (поле4)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Mayor
Специалист

ru
Offline Offline

« Ответ #5 : 11-09-2007 19:01 » 

CREATE имяиндекса on tarifics (поле4)

индекс сможет оптимизировать запрос до О*лнО ?
я просто в оптимизации запросов к субд ньюб ...

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

Записан

1n c0de we trust
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 11-09-2007 19:12 » 

не совсем понял....
что на что умножаем?
Код:
select time, phohenumber 
   from tarific
   where функция_выделения_кода(phonenumber) in (select phnumber from mobilephone)
в таблице mobilephone - коды операторов
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Mayor
Специалист

ru
Offline Offline

« Ответ #7 : 11-09-2007 20:24 » 

не совсем понял....
что на что умножаем?
Код:
select time, phohenumber 
   from tarific
   where функция_выделения_кода(phonenumber) in (select phnumber from mobilephone)
в таблице mobilephone - коды операторов

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

gsm шлюз то будет с 1 каналом, нужно подсчитать сколько раз требуется 2 и более канала связи для звонков на сотовые
« Последнее редактирование: 11-09-2007 20:27 от Mayor » Записан

1n c0de we trust
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 12-09-2007 07:58 » 

как я понимаю, у тебя задача одноразовая - посчитать эффективность приобретения
потом возникнет вопрос  о тарификации, а у тебя уже будет готовая база
и если у тебя не получится доказать в этом месяце/квартале/полугодии, удастся доказать в следующем.

кроме того ты привел листинг от оператора по разным номерам
для, тарификации тебе не важно с какого телефона звонили, а если важно, то добавляешь поле - номер_звонившего

конечно можно, и даже, наверное, нужно, отпарсить номера на входе в таблицу.
Но!
Задача одноразовая, в смысле один раз в месяц, потому время на обработку данных не критично, это же не реал-биллинг

вот смотри - ты написал первый пост 8 числа, сегодня 12, уже можно было отпариться Улыбаюсь причем, на любом доступном языке
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Mayor
Специалист

ru
Offline Offline

« Ответ #9 : 12-09-2007 10:25 » 

вот смотри - ты написал первый пост 8 числа, сегодня 12, уже можно было отпариться Улыбаюсь причем, на любом доступном языке

вот только я для парсинга зачем-то хаскель выбрал, тк время выполнения задачи было не критично,

в натуре отпарсить на авк, 1 метр 1минута, 2 метра 4 минуты, 80 метров полный капец ... ну может до этого не дойдет Улыбаюсь
Записан

1n c0de we trust
Mayor
Специалист

ru
Offline Offline

« Ответ #10 : 13-09-2007 06:59 » 

ББ обламал хаскель на изучение sql тоже времени не осталось ...

вроде решение должно быть в диапазоне O*lnO :

Код:
#!/bin/bash
awk -f t1.awk <m1.txt >tmp1
sort tmp1 >tmp2
awk -f t2.awk <tmp2 >tmp3

Код:
#!/bin/awk -f
BEGIN {

FIELDWIDTHS = "2 1 2 1 5 9 43 2 5 9 5"
o = "\t"
}
#
/Телефон/ { tel = $10 + 0}

$7 ~ /^343/ {
#print " town " $0
next
}
#7 - dest
#9 - long
#10 - cost

/^[0-9][0-9]\./ {
# print $1 " -- " $3
sub(/\./," ",$5)
gsub(/\t/,"",$7)
time = mktime( " 2007 " $3 " " $1 " " $5 " 00")
timeend = time+$9*60
print time o tel o timeend o $9 o $7 o  $10

#print $5 " ++++ " $7 " --- " $8
}

это парсит текст в таблицу ...

Код:
#!/bin/awk -f
BEGIN {
FS = "\t"
OFS = "\t"
told = 0
}

told > $1 {
if (bold != "") {
split(bold,b,"\t")
print strftime("%Y%m%d%H%M",b[1]),b[2],b[4],b[5],b[6]
}
bold = ""
print strftime("%Y%m%d%H%M",$1),$2,$4,$5,$6
told = told > $3 ? told : $3
next
}

{
bold = $0
told = told > $3 ? told : $3
}

это удаляет одиночные звонки - которые по идее должны были идти через шлюз, в принципе часть выведеных скриптом звонков тоже пошла бы через шлюз ...

какой алгоритм потребуется для определения :
-сколько выведенных скриптом звонков пойдет через шлюз
-сколько потребуется организации дополнительных линий связи для исходящих звонков с минимальным временем ожидания?

время на разработку:
4 дня на обсуждение инструментария разработки Улыбаюсь
5 минут на разработку алгоритма
1.5 часа на реализацию (из них полчаса на изучение формата timestamp )
0 отладка - опять почему-то не потребовалась -- я уже начал раслабляться с поиском багов ...

зы: на обработку тестовых 200 кб тратится 3 секунды, клиенты своих баз данных не показывают, в принципе 80мб должно пропарсить без проблемм лишь бы формат совпал ...

авк походу стал несколько ограничивать возможности реализации: плохая поддержка регулярных выражений, плохая интеграция императивного и дата-дривен стилей программирования ... похоже приходит время присмотреться к перлу или лиспу ... что из них практичнее?
Записан

1n c0de we trust
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines