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

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

ru
Offline Offline

« : 02-11-2007 12:25 » 

perl :hash arrays of array :: create,add array

дан файл для парсинга вида:

Цитата
1.2.1 Услуга местного завершения вызова на узле связи сети связи другого оператора связи
73432958900-73432958999 73432959000-73432959099 73432959100
73432959300-73432959399 73432959800-73432959899
73433100000-73433100999 73433101000-73433101799 (c 05.09.2007) 73433103000 73433104000-73433105999 (c 14.09.2007) 73433106000-73433106099 73433107000-73433107099 73433107100-73433107199 73433107400-73433107799 73433107800-73433107999 (c 05.09.2007) 73433108000-73433108999 73433109000-73433109999 (c 14.09.2007) 73433219900-73433219999 73433259200

как создать из него хеш списка списков вида:

$table$'1.2.1 Услуга местного завершения вызова на узле связи сети связи другого оператора связи'[1][1]=73432958900
$table$'1.2.1 Услуга местного завершения вызова на узле связи сети связи другого оператора связи'[1][2]=73432958999
$table$'1.2.1 Услуга местного завершения вызова на узле связи сети связи другого оператора связи'[3][1]=73432959100
$table$'1.2.1 Услуга местного завершения вызова на узле связи сети связи другого оператора связи'[3][2]=undef

(c 05.09.2007) - игнорируются

 * почитал hash of arrays получилось только создать:

$table$'1.2.1 Услуга местного завершения вызова на узле связи сети связи другого оператора связи'=73433107000-73433107099

.....

как добавить к существующей ссылке на аррей еще 1 аррей через сплит?

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

.....

как добавить к хешу списков содержащему ссылки на еще 1 список, указатель текущей позиции в первом списке?

( для алгоритма требуется указатель на текущую позицию диапазона номеров в каждой из таблиц маршрутизации )



Код: (Perl)

while (<$tf>) {     # assigns each line in turn to $_
        if ( /У/ ) {
                $service=$_;
                next;
        }
        if ( /7343/ ) {
                s/\(c /\(c/g;
                $hash{$service}=  $hash{$service} . " " . $_;
                next;
        }
        print $gf $_;

}

my %telhash;

foreach my $service ( keys %hash) {
        my @fields= split " ",$hash{$service};
        $telhash{$service}=[@fields];
}

что можно почитать из бесплатной документации в pdf html.tar.bz2 форматах пригодных для распечатки, кроме pleaс и мануала идущего с перлом?
Записан

1n c0de we trust
RXL
Технический
Администратор

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

WWW
« Ответ #1 : 03-11-2007 22:05 » 

Mayor1, не понимаю проблемы и того, что ты пытаешься сделать...

Цитата
$table$'1.2.1 Услуга местного завершения вызова на узле связи сети связи другого оператора связи'[1][1]=73432958900
Бред, по моему...
Вот так можно:
Код:
$table{'1.2.1 Услуга местного завершения вызова на узле связи сети связи другого оператора связи'}[1][1] = 73432958900;

Только сперва нужно последовательно создать массивы:
Код:

$section = '1.2.1 Услуга местного завершения вызова на узле связи сети связи другого оператора связи';
$table{$section} = [];
$table{$section}[1] = [];
$table{$section}[1][1] = 73432958900;

Иначе будет ошибка. Вторую инициализацию ($table{$section}[1] = [];) логично создавать через push().

Цитата
как добавить к существующей ссылке на аррей еще 1 аррей через сплит?

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

Все очень не ясно. Вроде и понятно, но и нифига не понятна.
Напиши еще раз, но только по-русски.
Не забудь прочесть перед нажатием кнопки "Отправить"!
« Последнее редактирование: 04-11-2007 11:36 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #2 : 04-11-2007 12:12 » 

Цитата
$table$'1.2.1 Услуга местного завершения вызова на узле связи сети связи другого оператора связи'[1][1]=73432958900
Бред, по моему...
Вот так можно:
Код:
$table{'1.2.1 Услуга местного завершения вызова на узле связи сети связи другого оператора связи'}[1][1] = 73432958900;
дак что ты от меня хочешь я на перле уже лет 5 ничего не писал, просто синтаксис с каким то другим языком смешался


Только сперва нужно последовательно создать массивы:
Иначе будет ошибка. Вторую инициализацию ($table{$section}[1] = [];) логично создавать через push().

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



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

Все очень не ясно. Вроде и понятно, но и нифига не понятна.
Напиши еще раз, но только по-русски.
Не забудь прочесть перед нажатием кнопки "Отправить"!

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

имелось ввиду как сделать нечто вроде этого:
Код:
while (<$tf>) {     # assigns each line in turn to $_
if ( /У/ ) {
$service=$_;
next;
}
if ( /7343/ ) {
s/\(c /\(c/g;
$hash1{$service}=[(@{$hash1{$service}}, split)];
next;
}
print $gf $_;

}

но только $hash1{$service} должен ссылаться на аррей, а не содержать в себе объединяющую его элементы строку
Записан

1n c0de we trust
RXL
Технический
Администратор

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

WWW
« Ответ #3 : 04-11-2007 12:41 » 

Ага Два дня голову ломал и наконец-то понял, что ты имел в виду по "аррей"... Я ж говорю - лучше по-русски писать... Тоже самое с терминами: если затрудняешься, то лучше общими словами описать.

Mayor1, ты уж меня извини, но вопрос так и остался не ясен: что ты хочешь узнать?

Вот вопросы, которые видно:

Цитата
как добавить к хешу списков содержащему ссылки на еще 1 список, указатель текущей позиции в первом списке?

( для алгоритма требуется указатель на текущую позицию диапазона номеров в каждой из таблиц маршрутизации )

Не могу ничего посоветовать, пока не пойму, что и для чего делается.


Цитата
что можно почитать из бесплатной документации в pdf html.tar.bz2 форматах пригодных для распечатки, кроме pleaс и мануала идущего с перлом?

Ты имеешь в виду доки по перлу или что?


Цитата
но только $hash1{$service} должен ссылаться на аррей, а не содержать в себе объединяющую его элементы строку

Если я правильно понял вопрос, то во втором варианте у тебя получается то, что ты хочешь. Или опять не то?..


В общем, как и в любом проекте, нужено четкое ТЗ. Иначе - то, что видим...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #4 : 05-11-2007 16:44 » new

Mayor1, ты уж меня извини, но вопрос так и остался не ясен: что ты хочешь узнать?

попытаюсь переформулировать вопросы после того как осилю документацию, если они еще остануться или просто запосщу их решение ... или перейду на питон или руби


Цитата
как добавить к хешу списков содержащему ссылки на еще 1 список, указатель текущей позиции в первом списке?
( для алгоритма требуется указатель на текущую позицию диапазона номеров в каждой из таблиц маршрутизации )
Не могу ничего посоветовать, пока не пойму, что и для чего делается.

это я уже сделал и запостил код:
ссылка на список заменяется ( уничтожая старый безымянный список ), на ссылку которая формируется путем сложения содержимого уничтоженного списка и нового списка:
$hash1{$service}=[(@{$hash1{$service}}, split)];


Цитата
что можно почитать из бесплатной документации в pdf html.tar.bz2 форматах пригодных для распечатки, кроме pleaс и мануала идущего с перлом?
Ты имеешь в виду доки по перлу или что?

да мануал идущий с перлом слишком трудно усваивается: порядка 17-35 страниц за 1 выходной день, при моей средней скорости 200 страниц англ или 150 стр рус за выходной

требуются доки в удобном формате для распечатки и содержащие кроссреференс для удобства навигации


$hash1{$service}=[(@{$hash1{$service}}, split)];
Цитата
но только $hash1{$service} должен ссылаться на аррей, а не содержать в себе объединяющую его элементы строку
Если я правильно понял вопрос, то во втором варианте у тебя получается то, что ты хочешь. Или опять не то?..

нада еще после сверки значений ареев с маской, разбить каждый элемент списка на еще 1 список, содержащий начальный и конечный номер с удалеными кодами города, теоретически это будет решаемо после того как я осилю еще 5-7 мануалов ...



В общем, как и в любом проекте, нужено четкое ТЗ. Иначе - то, что видим...

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

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

Добавлено через 13 дней, 20 часов, 51 минуту и 12 секунд:
Цитата
как создать из него хеш списка списков вида:

   $th1{$service}[$c][1]=$s; # %th1 - базовый хеш, благодаря автовивификации инициация не требуется

Цитата
как добавить к существующей ссылке на аррей еще 1 аррей через сплит? :

$hash1{$service}=[(@{$hash1{$service}}, split)]; # %hash1 требуется инициализация : $hash1{$service}=[()];

Цитата
как добавить к хешу списков содержащему ссылки на еще 1 список, указатель текущей позиции в первом списке? :

некоректный вопрос проще и производительней создать еще 1 хеш

« Последнее редактирование: 19-11-2007 13:35 от Mayor » Записан

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

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines