Forum Webscript.Ru

Программирование => Perl => Тема начата: DartSidius от 31 Августа 2007, 06:26:23

Название: Бинарник
Отправлено: DartSidius от 31 Августа 2007, 06:26:23
Есть бинарник определенного формата . . . не подскажите как вообще вытягивать оттуда данные?
Название: Бинарник
Отправлено: arto от 31 Августа 2007, 09:00:57
найти ниточку и осторожно тянуть.
Название: Бинарник
Отправлено: DartSidius от 31 Августа 2007, 10:02:14
Оригинальный ответ  . . .
Название: Бинарник
Отправлено: arto от 31 Августа 2007, 10:44:15
на оригинальный вопрос
Название: Бинарник
Отправлено: vladsu от 31 Августа 2007, 14:24:01
Если файл большой, читайте блоками и
perldoc unpack
если маленький, чтобы загрузить в память, то читайте в память и
perldoc unpack

можно читать конечно и побайтно, но производительность будет хромать.
Название: Бинарник
Отправлено: DartSidius от 03 Сентября 2007, 02:30:52
vladsu

Спасибо . . . буду копать
Название: Бинарник
Отправлено: DartSidius от 03 Сентября 2007, 09:05:55
Чёта перлдок пишет, что нету документации . . .
Название: Бинарник
Отправлено: vladsu от 03 Сентября 2007, 13:15:32
а так
perldoc -f unpack
Название: Бинарник
Отправлено: DartSidius от 04 Сентября 2007, 02:34:01
Ага...так работает . . . там написано что нужно использовать unpack TEMPLATE,EXPR

я так понимаю EXPR - бинарные данные

а TEMPLATE - это типа формат данных в бинарнике? . . .


я просто пытаюсь декодировать бинарник от цифровой АТС SI2000 . . . файлы AMA
Название: Бинарник
Отправлено: DartSidius от 04 Сентября 2007, 02:39:08
Ещё . . . файл большой . . . читать нужно блоками . . . мне так сказали, но инфы почти никакой нигде нет . . . скудная информация, может подскажите что-нибудь?
Название: Бинарник
Отправлено: vladsu от 04 Сентября 2007, 18:54:09
Цитировать
DartSidius:
я просто пытаюсь декодировать бинарник от цифровой АТС SI2000 . . . файлы AMA

Я почему-то так и подумал с самого начала.

Честно говоря даже и не знаю чем Вам помочь, если у Вас есть дока с описанием формата ленты, то вообще не вижу никаких проблем, если же доки нет, то будет очень трудно, если не сказать не возможно. Приходилось декодить EWSD12 по доке EWSD7, потом 2 года баги чистили.

Вообще рекомендую книгу (http://manning.com/cross/), лучшая из всех что я видел в направлении обработки данных в Перл.
Название: Бинарник
Отправлено: DartSidius от 05 Сентября 2007, 02:15:21
Цитировать
vladsu:
Я почему-то так и подумал с самого начала.

Честно говоря даже и не знаю чем Вам помочь, если у Вас есть дока с описанием формата ленты, то вообще не вижу никаких проблем, если же доки нет, то будет очень трудно, если не сказать не возможно. Приходилось декодить EWSD12 по доке EWSD7, потом 2 года баги чистили.

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


Описание ленты есть . . . просто я ничё понять не могу в этих 40 листах . . . вернее понимаю, но не пойму как привязаться к перлу это всё . . .

Книжку поищу, спасибо!
Название: Бинарник
Отправлено: DartSidius от 05 Сентября 2007, 03:30:37
Начал действовать вот так

open(FILE,"123.ama");
binmode FILE;

while() {
   open(F,">>1.txt");
   print F unpack("b*",$_)  . "\\n";
   close(F);
}

close(FILE);

в итоге получил файл с двоичным кодом . . . может можно теперь попробовать перегнать кода в нормальный вид?
Название: Бинарник
Отправлено: DartSidius от 05 Сентября 2007, 05:45:08
7.1. Записи о вызовах
Записи о вызовах состоят из фиксированной и переменной частей. Фиксированная часть записи
содержит информацию о типе записи (базовый вызов, FAIS, FAU,...) и ее назначении (тарификация,
PMOB, MOB, DEB,...), информацию о номере абонента, действия которого привели к созданию
записи. Переменная часть записи состоит из информационных элементов, которые выбираются в
зависимости от типа записи. Любая запись начинается с фиксированной части, за которой могут
следовать информационные элементы переменной части записи.
Положение
поля
Длина поля Часть записи
1 16+(от 2 до 19) Фиксированная часть для всех записей
17 m Переменная часть в зависимости от типа записи
Переменная часть может содержать следующие информационные элементы:
Информационный элемент Длина Тип записи
Вызов FAIS FAU
100 Вызываемый номер (Called number) от 4 до 22 X
101 Номер абонента, на которого передан вызов (Call
accepting party number)
от 5 до 23 X (a)
102 Дата и время начала вызова (Start date and time) 9 X X X
103 Дата и время завершения вызова (End date and time) 9 X X
104 Количество тарифных импульсов (Number of charging
units)
4 X X X
105 Базовая услуга (Basic service) 3 X X
106 Дополнительная услуга у инициатора вызова
(Supplementary service used by calling subscriber)
2 X (b) X
107 Дополнительная услуга у вызванного абонента
(Supplementary service used by called subscriber)
2 X (c)
108 Администрирование услуги абонентом (Subscriber’s
control input)
3 X
109 Последовательность введенных символов
(Dialed digits)
от 3 до 32 X
110 Исходящая категория (Origin category) 2 X X X
111 Тарифное направление (Tariff direction) 3 X X X
(*9*) 112 Причина безуспешного вызова (Failure cause) 2 X (d)
113 Идентификация входящей соединительной линии
(Incoming trunk data)
9 X (e)
114 Идентификация исходящей соединительной линии
(Outgoing trunk data)
9 X (e)
(*1*) 115 Длительность вызова или использования
дополнительной услуги (Call / service duration)
5 X X (f)
8 FUN559000-PCR-150
(*2*) 116 Контрольная сумма (Checksum) 4 X X X
(*3*) 117 Бизнес-группа и центрекс-группа (Business and
centrex group id)
6 X (g) X (g) X (g)
(*4*) 118 Код доступа сети (Carrier access code) от 3 до 7 X (h)
(*3*) 119 Оригинальный номер вызывающего абонента
(Original calling party number)
от 3 до 23 X (i)
(*5*) 120 Данные о пополнении предоплаченного счета
(Prepaid account recharge data)
15 X (j)
(*6*) 121 Причина разъединения вызова (Call release
cause)
5 X (k) X X
(*6*) 122 CBNO (Charge Band Number) 5 X (l)
(*7*) 123 Общий идентификатор вызова (Common Call Id) 6 X (m)
(*7*) 124 Время до ответа (Durations Before Answer) 10 X (n)
(*8a*) 125 VoIP–информация (VoIP Info) 5 X (o)
(*8a*) 126 Количество передаваемых данных Data
(Amount of transferred Data)
5 X (o)
(*8*) 127 IP–адреса (IP Addresses) 4 + 4n X (o)
(*10*) 128 VoIP–информация (VoIP Info) 13 X (o)
(*10*) 129 Количество передаваемых данных Data
(Amount of transferred Data)
25 X (k,
o)
Название: Бинарник
Отправлено: DartSidius от 05 Сентября 2007, 05:45:57
8.2.1. Фиксированная часть записи
Поле Пози-
ция
Длина Наименование поля Формат
поля
1 1 1 Идентификатор типа записи (200) bin
2 2 2 Длина записи bin
3 4 4 Индекс записи bin
4 8 4 Идентификатор вызова bin
5 12 3 F8 F7 F6 F5 F4 F3 F2 F1 bin
F16 F15 F14 F13 F12 F11 F10 F9
Резерв F19 F18 F17
6 15 1 Последовательность Состояние учета
стоимости
bin
7 16 1 Длина кода зоны Длина списочного номера bin
8 17 n Код зоны и списочный номер абонента, действия
которого инициировали создание записи
BCD
Название: Бинарник
Отправлено: DartSidius от 05 Сентября 2007, 05:46:45
Вот выжержки из мануала . . . Если кому-то что-то скажет, то помогите :)
Название: Бинарник
Отправлено: arto от 05 Сентября 2007, 08:31:29
читать фиксированную часть, по ней опеределять переменную часть и читать ее. декодировать.
Название: Бинарник
Отправлено: DartSidius от 05 Сентября 2007, 08:32:40
Цитировать
arto:
читать фиксированную часть, по ней опеределять переменную часть и читать ее. декодировать.


вот я и не пойму как её выцепить :(
Название: Бинарник
Отправлено: arto от 05 Сентября 2007, 09:33:18
dlinu fiksirowannoj chasti znaete?

$/ = \\length_of_fix_part;
while () {
  # now in $_ -- fix part of record
  if ($_ eq "chunk1") {
    local $/ = \\length_of_chunk1;
    my $chunk1 = ;
    # processing...
  }
  # process other chunks
}
Название: Бинарник
Отправлено: DartSidius от 05 Сентября 2007, 10:07:07
Цитировать
arto:
dlinu fiksirowannoj chasti znaete?

$/ = \\length_of_fix_part;
while ( ) {
# now in $_ -- fix part of record
if ($_ eq "chunk1") {
local $/ = \\length_of_chunk1;
my $chunk1 = ;
# processing...
}
# process other chunks
}



Хм. . . . непонятно ничё :) . . . чанки какие-то . . . вообще...по-идее размер фиксированной части известен . . .
\\
Длина фиксированной части записи 16+n байт, где n – совокупная длина кода зоны и списочного
номера абонента, действия которого инициировали создание записи, представленных в виде
двоично-десятичных символов, как описано выше.
Название: Бинарник
Отправлено: DartSidius от 09 Сентября 2007, 14:07:35
ап
Название: Бинарник
Отправлено: DartSidius от 21 Сентября 2007, 10:23:21
Тему можно закрывать...разобрался сам