Типизированные файлы.
Сложные типы данных в языке Pascal
Seek (sp, filepos (sp)-1); {возвращение к изменяемой записи }. Begin { оператор assing находится в основной прграмме }. Writeln (' Введите 3 оценки ', fio); For j:= 1 to 3 do readln (bal); Write (sp, spisok); {запись в файл измененной записи}. Vvod; print; {процедуры создания и чтения файла}. Bal: array of byte; {Поле bal — массив из 3 оценок }. Процедуры и функции обработки файлов: Begin reset… Читать ещё >
Типизированные файлы. Сложные типы данных в языке Pascal (реферат, курсовая, диплом, контрольная)
Типизированные файлы — это файлы, состоящие из нумерованной последовательности объектов (записей) любого типа. С такими файлами можно работать в режиме прямого доступа, при котором выполняется непосредственное обращение к любой записи файла. Каждая запись файла имеет свой номер, начиная с 0 и т. д.
Процедуры и функции обработки файлов:
- 1) Write и Readзаписывают, и читают информацию из указанного файла и перемещают указатель файла к следующей записи.
- 2) Seek (файловая переменная, номер записи); процедура перемещения указателя на запись файла с заданным номером.
- 3) Truncate (файловая переменная); процедура, усекающая файл по текущей позиции указателя файла, т. е. все записи, находящиеся после указателя файла, удаляются.
- 4) Функция Filesize (файловая переменная); имеет тип Integer и определяет размер файла, т. е. число записей.
- 5) Функция Filepos (файловая переменная); имеет тип Integer и возвращает текущую позицию указателя файла.
Для добавления записей в конец файла используются процедуры:
Readln (a);
Seek (f, filesize (f));
Write (f, a);
При этом указатель устанавливается за конец файла, т.к. нумерация записей начинается с нуля. После чего с помощью Write можно добавлять записи. Открывать файл можно только процедурой Reset (f).
Для того, чтобы в режиме произвольного доступа считать, а затем изменить значение записи, следует выполнить два вызова процедуры Seek. Один вызов перед операцией Read, а другой — перед операцией Write (т.к. Read после чтения записи переместит указатель к следующей записи).
Пример: Cоздать файл из списка 10 студентов с их оценками (номер, Ф.И.О. и три оценки). Вывести его содержимое на экран, изменить фамилию студента с номером, введенным с клавиатуры, заново прочитать файл.
Program file;
Type.
wed = record {Тип wed включает 3 поля: n, fio, bal}.
n: byte; fio: string[15] ;
bal: array [1.3] of byte; {Поле bal — массив из 3 оценок }.
end;
Var.
spisok: wed; {Запись spicok типа wed}.
sp: file of wed; {Файл записей типа wed}.
procedure vvod; { процедура создания файла}.
var i, j: byte;
begin { оператор assing находится в основной прграмме }.
rewrite (sp); {открытие файла для записи}.
with spisok do For i:=1 to 10 do.
begin n:=i;
writeln (' Введите фамилию — ', i); readln (fio);
writeln (' Введите 3 оценки ', fio); For j:= 1 to 3 do readln (bal [j]);
write (sp, spisok); { запись в файл информации о студенте}.
end;
close (sp); { закрытие файла для записи }.
end;
procedure print; { процедура чтения и печати всего файла }.
var j: byte;
begin.
reset (sp); {открытие файла для чтения}.
writeln (`Список студентов: `);
while not eof (sp) do.
with spisok do.
begin.
Read (sp, spisok); {чтение данных из файла}.
write (n,' ', fio); {вывод записи на экран}.
For j:= 1 to 3 do write (' ', bal [j]);
writeln ;
end;
readln;
close (sp) ;
end;
procedure work;
var num: integer;
begin reset (sp); {открытие файла для чтения}.
writeln ('номер= ');
readln (num);
seek (sp, num-1); {поиск записи с указанным номером (нумерация записей с 0)}.
read (sp, spisok);{чтение и перемещение указателя к след. записи}.
write ('fio=');
writeln (spisok.fio);
seek (sp, filepos (sp)-1); {возвращение к изменяемой записи }.
writeln (` Введите новую фамилию');
readln (spisok.fio);
write (sp, spisok); {запись в файл измененной записи}.
close (sp);
end;
begin {начало основной программы}.
assign (sp,'Vedom.DAT'); {связать файловую перем-ю sp с файлом Vedom. dat}.
vvod; print; {процедуры создания и чтения файла}.
work; print; {корректировка и чтение измененного файла}.
readln.
end.