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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Индексация данных, Создание быстроко поиска 
:(
    Опции темы
21:80
Дата 24.9.2005, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребята, задача такова:
Есть текстовый файлик ~12 метров. В нем храняться данные в виде:

<имя_раздела1>
ключ11=значение11
ключ12=значение12

<имя_раздела2>
ключ21=значение21
ключ22=значение22

<имя_раздела3>
ключ31=значение31
ключ32=значение32

... ... ...

Таких записей в файлике около миллиона.
Имена разделов могут быть произвольные, но уникальные! Количество пар ключ-значение неограничено, но имя ключа уникально в данном разделе.
Задача: необходимо проидексировать все имена разделов, чтобы знать в каком месте файла находится раздел, т.е. запомнить номера строк на которых находится заголовок раздела. После индексации необходимо совершать быстый переход к заголовку раздела. Важно, что при следующем открытии файлика не должна производится повторная индексация, т.е. её данные надо сохранять, например в другой файлик.

Если кто даст ссылочку на пагез где можно четко почитать про индексацию - клёво, ну а если прямо на ПЕРЛАХ наваяете - ваще отпад!

Заранее благодарен ]Ж-)))

Это сообщение отредактировал(а) 21:80 - 24.9.2005, 16:16
PM MAIL   Вверх
sharq
Дата 24.9.2005, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



21:80 для таких целей используют БД.

smile

Это сообщение отредактировал(а) sharq - 24.9.2005, 19:20


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
21:80
Дата 24.9.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



sharq я понимаю, дело только в том, что файлик есть, значит надо :-)) Да, кстати важное замечание количество пар ключ-значение в каждом разделе разное и никак с положением раздела не связано :-)) Думаем господа!
PM MAIL   Вверх
sharq
Дата 25.9.2005, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



21:80 есть такая идея отпарсить файлик и привязать имени раздела номер строки, это соответствие хранить в хеше, который можно дампить Storable'ом. При внесение новой записи в файлик или при его изменение, редактировать хеш.

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
21:80
Дата 27.9.2005, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



sharq расскажи про Storable подробнее, пожалуйста. Че ето такое и как пользоваться. А парсер уже написан, только для "разчленения" такого гиганта (12 Мб если позабыл), на 4 пне 2Гб мозгов надо около 5 сек, причем проц под завязку загружен - проблема.

Жду твоего ответа с нетерпением :-))
PM MAIL   Вверх
sharq
Дата 27.9.2005, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



21:80
Код

#(c)j256
#Как получить бинарный дамп хеша или массива на Perl
  use Storable;
#Запись/чтение дампа в файл.
   store (\%table, 'file');  $hashref = retrieve('file');
   lock_store (\%table, 'file');  $hashref = lock_retrieve('file');
#Запись/чтение дампа в ранее открытый файл.
   store_fd (\%table, \*FILE); $hashref = fd_retrieve(\*FILE);
#Запись/чтение дампа в скалярную переменную
#(удобно для использования для привязки сложной структуры к ключу в DB_File или BerkeleyDB).
   $hash_dump = freeze (\%table); $hash_ref = thaw($hash_dump);

#Если нужно получить дамп в символьном "perl sources"-виде для использования в eval или print: use Data::Dumper;


Storable - позволяет дампить perl-структуры данных в файле и восстанавливать их, очень удобная вещь.)
Например, ты работаешь с хешем, затем взял и сохранил его в сторабле, затем когда тебе нужно восстановил его или взял из него инфу или изменил его и переписал заново. Причем простым редактором содержимое сторабла не прочитаешь. Так что пользуйся.

smile
Добавлено @ 23:22

Если те нужен алгоритм твоей задачи, это уже совсем другой вопрос.)


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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