Функция FILEPOS задает возвращение номера доступного элемента. Единственным аргументом в ее вызове является идентификатор файловой переменной, а возвращается значение типа Longlnt. Например, при значении файловой переменной f, изображенном последним, после присваивания:
А := FilePos ( f );
переменная А типа Longlnt получит значение 3.
Для определения общего количества элементов в файле используют функцию FILESIZE. Единственным аргументом в ее вызове является идентификатор файловой переменной, а возвращается значение типа Longlnt. Например, значением переменной N типа Longintпосле присваивания:
N := FileSize (f)
становится количество элементов в файле.
Понятно, что, используя в программе вызовы процедуры seek в паре с вызовами read или write, мы сможем прочитать любой элемент файла или изменить его значение.
В частности, с помощью процедур seek, filesize и write можно расширить файл, дописывая значения нового элемента в конец:
Sееk ( f, filesize (f));
write(f, v)
После вызова seek файловый указатель устанавливается за последним элементом, т.е.
а после вызова write значение vзаписывается в новый элемент, после чего файловый указатель перемещается вправо:
Процедура TRUNCATE задает уничтожение остатка файла, начиная с доступного элемента. Например, после выполнения вызовов:
seek(f, 3); truncate (f)
элементы с 3-го по последний уничтожаются, остаются элементы с номерами 0, 1 и 2.
Использование процедур прямого доступа позволяет удалять элементы из файла.
Пример:
Запишем программу, которая задает удаление ненужных элементов файла, т.е. его уплотнение.
Пусть в файле Group.dat хранится информация о студентах группы: фамилия, имя и средний балл. С клавиатуры вводится фамилия студента, который выбыл, – запись о нем надо удалить из файла.
В следующей программе файл читается до конца и во вспомогательный файл копируются записи, значение поля Surname (фамилия), которое отличается от заданной фамилии. Далее файлы закрываются, и средствами модуля System старый файл просто уничтожается, а вспомогательному присваивается внешнее имя старого.
program OutFromGroup;
type Student = record
Surname, Name : string[20];
Ball : real;
end;
var Fi, Fo : file of Student;
FileName: string;
procedure OpenFile;
begin
writeln(‘Задайтеимяфайла’);
readln(FileName);
assign(Fi, FileName);
reset(Fi);
assign(Fo, 'NewFile.dat');
rewrite(Fo);
end;
procedure ClearFile; {Процедурасжатияфайла}
var St : Student;
StudtoOut : string[20];
begin
writeln(‘Задайте фамилию студента, запись о котором удаляется: ’); readln(StudtoOut);
while not eof(Fi) do begin
read(Fi, St) ;
if St.Surname<>StudtoOut then
write(Fo, St)
end;
close(Fi);
close(Fo); {Вызовыпроцедурмодуля System}
Erase(Fi); {дляуничтожения}
ReName(Fo, FileName); {ипереименованияфайла}
end;
begin
OpenFile;
ClearFile;
end.
Кроме операций замены и удаления элементов файла, опишем операцию вставки элемента в произвольное место файла. Пусть место задается номером нового элемента в файле. Для вставки используют один из двух алгоритмов.
В первом алгоритме используется вспомогательный файл, в который переписываются все элементы, предшествующие заданному.
Открыть основной и вспомогательный файлы.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.