|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Tarasov Sergej 2:5020/400 02 Nov 2000 15:11:26 To : Yaroslav Kulikov Subject : Файлы -------------------------------------------------------------------------------- Thu Nov 02 2000 10:17, Yaroslav Kulikov wrote to All: YK> #/------/# Да прибудет с Вами великая сила, */_All!_/* YK> _*------*_ YK> Hарод, подскажите мне _наибыстрейший_ способ чтения определенной строки YK> (известен номер нужной строки) текстового файла. При всем при этом номер YK> может достигать и 1000. Именно поэтому нужен наибыстрейший способ. А может в FAQ это дело? А то в прошлый раз скатились на обсуждение того, кто же именно нарисован на небезызвестной кулинарной книге, а человеку так и не ответили... В общем виде эта задача решения не имеет, поскольку компьютер обычно считает, что файл состоит из байтов, а не из строк. Если файл не меняется, то наиболее просто сделать так: отдельным скриптом читаешь файл построчно, и для каждой строки в другом файле пишешь ее смещение, примерно так $pos = tell(FILE); $s = <FILE>; print INDEX_FILE, pack("N", $pos); и так в цикле затем в твоем скрипте сначала из индексного файла узнаешь смещение, идешь в нужный файл на заданную позицию и читаешь строку. seek(INDEX_FILE, $str_number*4,0); read(INDEX_FILE,$pos,4); $pos = unpack("N", $pos); seek(FILE,$pos,0); $str = <FILE>; Hе забудь индексный файл открывать как бинарный, а то под Виндовс может иногда не работать. --- ifmail v.2.15dev5 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/16679ca198d7e.html, оценка из 5, голосов 10
|