Ввод/вывод с произвольным доступом
Проблема
Нужно прочитать двоичную запись из середины большого файла, но вам не хочется добираться до
нее, последовательно читая все предыдущие записи.
Решение
Определите размер записи и умножьте его на номер записи, чтобы получить смещение в
байтах. Затем вызовите seek для полученного смещения и прочитайте запись:
$АДРЕС = $PA3MEP * $НОМЕР;
seek(FH, $АДРЕС, 0) or die "seek: $!";
read(FH, $БУФЕР, $РАЗМЕР);
Комментарий
В решении предполагается, что $НОМЕР первой записи равен нулю. Если нумерация начинается
с единицы, измените первую строку фрагмента:
$АДРЕС = $PAЗMEP * ($HOMEP-1);
Для текстовых файлов это решение не работает — только строки не имеют одинаковую длину.
Но такие ситуации встречаются очень редко.
См. такжеОписание функции seek
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|