Чтение записей фиксированной длины
Проблема
Требуется прочитать файл с записями фиксированной длины.
Решение
Воспользуйтесь функциями
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
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|