Чтение записей фиксированной длины

Проблема

Требуется прочитать файл с записями фиксированной длины.

Решение

Воспользуйтесь функциями pack и unpack:
# $RECORDSIZE - длина записи в байтах.
# $TEMPLATE - шаблон распаковки для записи
# FILE - файл, из которого читаются данные
# @FIELDS - массив для хранения полей
until ( eof(FILE) ) {
  read(FILE, $record, $RECORDSIZE) == $RECORDSIZE
  or die "short read\n";
  @FIELDS = unpack($TEMPLATE, $record);
}

Комментарий

Поскольку мы работаем не с текстовым, а с двоичным файлом, для чтения записей нельзя воспользоваться оператором <...> или методом getline модулей IO::. Вместо этого приходится считывать конкретное количество байт в буфер функцией read. После этого буфер содержит данные одной записи, которые декодируются функцией unpack с правильным форматом.

См. также

Описание функций unpack, pack и read



2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: