![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
У меня такое ощущение, что все говорят о разных вещах) Правильно ли я понимаю, что вам надо организовать поиск подстроки в файле?
Если да, то вам как раз надо использовать алгоритм двоичного поиска (ака метод деления пополам, дихотомия и т.д.). Он предназначен для поиска в упорядоченных массивах. Понятное дело, что считывать ваш огромный файл в память нельзя. Поэтому придется абстрагироваться от перловых массивов и принять файл за массив. Для этого придется написать ф-ию, которая будет перемещать указатель чтения построчно (учитывая строгий формат файла это не сложно). Ну а потом собственно реализовать алгоритм поиска (здесь есть более простое и понятное его объяснение) [а может на CPAN уже есть]. ЗЫ: спасибо человеку, который когда-то меня ткнул носом в эту вещь Добавлено через 1 минуту и 44 секунды упс, надолго я оставил страницу с постингом... уже все до меня написали) -------------------- Died at Life.pl line 21 |
|||
|
||||
| gcc |
|
||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
заработало короче, не знаю или правильно, но
меняем:
на:
а может кто-то объяснить что такое $buf и $r? почему функция filebinsearch запускается внутри самой фукнции? никогда такого не видел и где в данном скрипте ключевые моменты (потому что не понятно на все 100% принцип действия, но некоторые момонты понятные, но остальные нет) если это реально... еще раз нашел:
Это сообщение отредактировал(а) gcc - 23.1.2009, 09:17 |
||||||
|
|||||||
| gcc |
|
||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
может кто-то подсказать
почему данные функции в скрипте без переменной вывода? my $tt = rec_shift( $file, 1 ); идет 3 функции
как это понимать, куда записываеться вывод? я хотел переделать эту часть:
но не понял куда записывается вывод... Добавлено @ 21:06 может, Уважаемый arto, однострок покажет Это сообщение отредактировал(а) gcc - 23.1.2009, 21:09 |
||||||
|
|||||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
File::SortedSeek
http://search.cpan.org/~jfreeman/File-Sort...e/SortedSeek.pm вот еще нашел: никто не подскажет куда зыписывается вывод из функции rec_shift?
|
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Это называется рекурсия Никуда он не записыватся, т.к. его нет. Эта ф-ия устанавливает курсор чтения (перемещает его построчно). Исходник плохо читаем, пройдитесь по нему perltidy. Возможно тогда найдется больше желающих помочь) Это сообщение отредактировал(а) KSURi - 25.1.2009, 01:04 -------------------- Died at Life.pl line 21 |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
KSURi, я откоректировал...
Добавлено через 5 минут и 42 секунды я заметил что там перебор, но куда вывод записывается? смысл, можно ли его записать? как там прмиерно его записать? я пробовал по разному return там убрать но не работает...
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perl -MData::Dumper -0x0a -lne '%hash = ( %hash, split "\t" ); END { print Dumper \%hash }' file
|
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
arto, one-liner'ы конечно хороши, в разумных пределах. Но для 20 гигабайтового файла и поиска подстроки в нем это не подойдет.
-------------------- Died at Life.pl line 21 |
|||
|
||||
| amg |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
gcc, если Вас не сильно затруднит, проверьте, пож., решение на основе БД на Вашем 20Г файле. У себя я попробовал на 175М -- база создается очень долго и занимает много на диске (у меня -- более 5 мин и 300 с лишним М), зато поиск ключей по ней идет практически мгновенно. Вот код (parse.pl):
Пользоваться:
Это сообщение отредактировал(а) amg - 26.1.2009, 15:07 |
||||
|
|||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Я так полагаю это лабораторная работа в ВУЗе?) На реализацию бинарного поиска.
Если да, то вариант с DB_File врядли подойдет. -------------------- Died at Life.pl line 21 |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
эта одни мужики задали задание чтобы выполнить работу, я сначало подумал что это шутка, потом сказали что можно сделать, вообщем я попробую еще тем модулем seek.. но файл должен быть текстовый
вообще-то гониво это все равно, извиняюсь Добавлено @ 16:52 KSURi, теоритически такое решение применять врядли где-то будут, или зачем тогда придумали Oracle ? Это сообщение отредактировал(а) gcc - 26.1.2009, 17:11 |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
KSURi, тут не совсем бинарный поиск, а бинараный поиск с алгоритмом передвижения по файлу, бинанрый поиск по массиву пишеться точно в одну строку
тем более врядли где-то есть такие данные упорядоченные... Это сообщение отредактировал(а) gcc - 26.1.2009, 17:10 |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
"есть файл ... как мне сделать хєши?" |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
извините arto, http://unixforum.org.ua/index.php?topic=18004
(я сначало хотел спросить одно, потом другое, оказалось что оно не заработало, но если я сюда выложу задание, то тот кто будет искать может тут найти свое задание и ответ который я ему отправлю я попробую модулем File::SortedSeek Это сообщение отредактировал(а) gcc - 27.1.2009, 17:51 |
|||
|
||||
| gcc |
|
||||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
подскажите как узнать сколько строк в файле?
так не получается:
так тоже:
хочю сделать так:
и так сам поиск:
http://www.perlmonks.org/?node_id=503154 если получится и если это правильно Это сообщение отредактировал(а) gcc - 28.1.2009, 12:58 |
||||||||
|
|||||||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |