Обновление файла с произвольным доступом
Проблема
Требуется прочитать старую запись из двоичного файла, изменить ее содержимое и записать обратно.
Решение
Прочитайте
(read) старую запись, упакуйте
(pack)
обновленное содержимое и запишите обратно.
use Fcntl; # Для SEEK_SET и SEEK_CUR
$ADDRESS = $RECSIZE * $RECNO;
seek(FH, $ADDRESS, SEEK_SET) or die "Seeking: $!";
read(FH, $BUFFER, $RECSIZE) == $RECSIZE
or die "Reading: $!";
@FIELDS = unpack($FORMAT, $BUFFER);
# Обновить содержимое, затем
$BUFFER = pack($FORMAT, @FIELDS);
seek(FH, -$RECSIZE, SEEK_CUR) or die "Seeking: $!";
print FH $BUFFER;
close FH or die "Closing: $!";
Комментарий
Для вывода записей в Perl не потребуется ничего, кроме функции
print. Помните, что
антиподом
read является print, а не
write,
хотя, как ни странно, антиподом sysread все же является syswrite.
См. такжеОписание функций
open,
seek,
read,
pack и
unpack
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|