|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Roman Yu. Panichkin 2:5020/400 02 Nov 2000 17:08:15 To : Yaroslav Kulikov Subject : Re: Файлы -------------------------------------------------------------------------------- Hello Yaroslav ! >>>>> At Thu, 02 Nov 2000 11:18:11 +0300 >>>>> "YK" == Yaroslav Kulikov writes : YK> Hарод, подскажите мне _наибыстрейший_ способ чтения определенной строки YK> (известен номер нужной строки) текстового файла. При всем при этом номер YK> может достигать и 1000. Именно поэтому нужен наибыстрейший способ. Буквально вчера решал такую задачу. Только файл содержал >5*10^6 сторк. Так что совет будет немножко не в тему. Hо может кому понадобится. Использовал для этого BerkeleyDB и его тип файла Recno. Вот код который выводит первую и миллионную запись. -- #! /usr/bin/perl -w use strict; use BerkeleyDB; my $srcfilename = "shb/data.txt"; my $dbfilename = "shb/data.db"; my @h; tie @h, 'BerkeleyDB::Recno', -Filename => $dbfilename, -Flags => DB_CREATE, -Source => $srcfilename or die "Cannont create $dbfilename: $!\n"; my $elements = scalar @h; print "first record is h[0]\n" print "1000000d record is h[999999]\n"; untie @h; -- Первый запуск долгий - пока создается файл data.db. Зато потом быстро записи вытаскивает. Размер файла data.db чуть больше исходного. После создания data.db файл data.txt можно удалить - вся информация содержится в data.db. Чуть не забыл. Строчка "my $elements = scalar @h;" нужна - иначе переноса информации не происходит. Скорее всего нужно что-то добавить в -Flags, чтобы отключить laze-mode. Hо искать было некогда. -- Best regards, -- Roman. If the future isn't what it used to be, does that mean that the past is subject to change in times to come? --- ifmail v.2.15dev5 * Origin: Alvis Plus Trade Company (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/135927304828c.html, оценка из 5, голосов 10
|