Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: поиск в большом массиве?   Andrey Sapozhnikov   18 Apr 2000 14:35:34 
Архивное /ru.perl/9117e49034f1.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional