Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> структура данных, помогите разобраться со структурой данны 
:(
    Опции темы
alyam
Дата 9.1.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Помогите разобраться. Упрощенно эта задачка выглядит так:
данные в файле находятся в таком виде:
<канцтовары>                ручка гелевая           <инв. номер>
<комплектующие>         HDD 200Mb           <инв. номер>
<канцтовары>                карандаш HB           <инв. номер>

можно использовать шаблон s/^\<(.*?)\>\s+(.*?)  \</

необходимо вывести на экран:
склад№1 - ручка гелевая
склад№1 - карандаш
склад№2 - HDD 200Mb
канцтовары на складе№1, комплектующие на складе№2
какую структуры данных использовать? хеш ?
PM MAIL   Вверх
amg
Дата 9.1.2007, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

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



Что такое "склад" и откуда берется его номер?
PM MAIL   Вверх
alyam
Дата 9.1.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



всего 2 скалада. на одном хранятся канцтовары, на втором комплектующие.
как уже говорил я упростил задачу.
на самом деле встречаются не только канцтовары и комплектующие....например есть 
<бумага>                 указывается ее тип и т.д. <инв. номер>
получается $1 - элемент набора данных (массива)
склад№ - это зависимость от содержимого в  $1
и $2 каким то образом надо связать, чтобы вывести. сложновато для меня  smile 
условимся, что с $1 можно связать только одно значение $2...

Это сообщение отредактировал(а) alyam - 9.1.2007, 12:53
PM MAIL   Вверх
shootnix
Дата 9.1.2007, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

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



Да можно не просто хеш, а хеш хешей или хеш хешей массивов.

Код

my $sklad1 = { 
    'ручка гелевая' => '<инв. номер>',
    'карандаш HB'   => '<инв. номер>'
 };

my $sklad2 = { ... };

my $main_hash = { 'склад№1' => $sklad1, 'склад№2' => $sklad2 };

# ну и ...

print $main_hash->{склад№1}->{ручка гелевая};


Можно так. Можно воспользоваться модулем стандартным Class::Struct чтобы было удобнее и сподручнее создавать структуры, соответственно, perldoc в помощь.

Можно всяк, в общем :-)
PM WWW ICQ   Вверх
alyam
Дата 9.1.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



нельзя так написать print $main_hash->{склад№1}->{ручка гелевая};
откуда я знаю что надо вывести именно гелевую ручку?
print должен вывести все элементы хеша или хеша хешей перебирая их...
PM MAIL   Вверх
amg
Дата 9.1.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

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



Ну, я бы сделал массив хэшей хэшей. Индекс массива - номер склада, ключ первого хэша - категория товара (канцтовары, комплектующие), ключи второго хэша - сами товары, значения - инв. номера. Такая структура несколько избыточна, если на каждом складе только одна категория товаров, зато последнее условие становится необязательным.
PM MAIL   Вверх
alyam
Дата 9.1.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



инв номера вообще нипричем. не вижу как массив хешей хешей решает задачу.

Это сообщение отредактировал(а) alyam - 9.1.2007, 13:03
PM MAIL   Вверх
shootnix
Дата 9.1.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

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



Согласен, массив делать удобнее, работать с ним приятнее :-)
Кто, собственно, мешает перебирать хеш хешей или массив хешей?

Код

for my $line ( @ary ) {
    # $line - ссылка на хеш, номер склада или как там...
    while ( ($key, $val) = each ( %{ $line } ) {
        print $key, $val
    }



Да вариантов масса. Непонятно только, что конкретно нужно сделать с данными, цель какая? Как выводить, что выводить? Может, лучше воспользоваться БД?
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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