|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 18 Apr 2000 14:35:34 To : All Subject : Re: поиск в большом массиве? -------------------------------------------------------------------------------- ronin wrote: > > Есть: > в текстовом файле ~200000 строк (размер ~6 Mb), каждая строка состоит из 5 > полей, отсортировано по первому полю по возрост. > ( 1 ююю ююю ююю ююю > 4 зззз зззз ззз ззз > 9 гггг гггг гггг ггггг > ... > ) > Hужно: > СТАHДАРТHЫМИ методами (без подключения дополнительных модулей)производить > поиск по первому полю и выводить всю строку. > Условия: критично по времени обработки. Чтение и запоминание (для 6Мб можно и все в память): open F,"file.dat" or die $!; my %data; while (<F>) { chomp; my ($key,$tail)=split /\s/,$_,2; $data{$key}||=[]; push @{$data{$key}},$tail; } close F; Поиск: sub findlines { my ($key)=@_; $data{$key} or print "Nothing found.\n", return; print "Found lines:\n"; foreach (@{$data{$key}}) { print "$key $tail\n"; } } Если массив большой, можно запоминать в хэше только позиции в файле. Если поле 1 уникально, можно избавиться от списка и хранить в хэше саму строку. Да много чего можно. Hапример документацию по Перлу прочитать :-) Андрей З.Ы. Даже и не думал проверять этот код. Ищите очепятки сами. --- ifmail v.2.15dev4 * Origin: Chelindbank (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/9117e49034f1.html, оценка из 5, голосов 10
|