{$I-} {Отключение контроля правильности чтение/записи}
reset (Fi) ;
{$1+} {Включение контроля}
Rez:=IOResult;
if Rez<>0 thenbegin
writeln('Проверьте правильность имени файла!');
writeln('Будет ли повторное задание имени? "Y"/"N":');
readln(Ch);
If (Ch = ‘n’) or (Ch = ‘N’) then halt(0);
{Выход из программы}
end;
end;
end;
procedure OutPutFile;
var St : Student; Ch : char;
begin
writeln(‘Хотите просмотреть данные о студентах? “Y”/”N”);
readln(Ch);
if (Ch = ‘Y’) or (Ch = ‘y’) then
while not eof(Fi) do begin
read(Fi, St);
clrscr;
writeln(‘Фамилия: ‘,St.SName);
writeln(‘Имя: ‘, St.Name);
writeln(‘Среднийбалл: ‘, St.Ball);
writeln(‘Для продолжения нажмите [Enter]’);
readln;
end;
close(Fi);
end;
begin
clrscr;
writeln(‘Программа печати данных о студента’);
openfile;
outPutfile
end.
2. Прямой доступ в системе Turbo Pascal
Как мы поняли из трех предыдущих разделов, доступность элемента файла, возможность его чтения или создания в процессе выполнения программы, зависит от его расположения в последовательности. До сих пор мы рассматривали подпрограммы последовательного доступа к элементам файла. Последовательный доступ заключается в том, что элементы файла не задаются явно, а их доступность в ходе выполнения программы целиком определяется расположением в последовательности. Сначала доступен первый элемент, после его обработки — второй и т.д.
Но последовательный доступ к элементам далеко не всегда удобен. Не задумывались ли вы над тем, как запрограммировать чтение элемента из типизированного файла по его номеру или его замену, добавление или удаление?
Понятно, что задать чтение элемента по номеру k можно так:
reset (f) ;
for i:=l to k-1 do read(f, x) ;
{пропущен k-1 элемент – доступен k-й}
read(f, x)
Для замены элемента файла по его номеру k можно “выйти на него” путем чтения предшествующих элементов. Далее можно воспользоваться одним недостатком системы Turbo Pascal. Дело в том, что система позволяет в состоянии чтения записывать в файл значения переменных (и только переменных!). Итак, замену элемента можно описать так:
reset (f) ;
for i:=l to k-1 doread(f, x);;
{пропущен k-1 элемент - доступен k-й}
х:=...;
write(f, х)
Самые пытливые читатели могут попробовать самостоятельно описать в таком же духе удаление и добавление элемента к файлу. Но все это “штучки”, которыми не следует пользоваться.
Вместо этого рассмотрим прямой доступ к элементам файла. Его суть в том, что элементы задаются номерами в последовательности, образующей файл. Такой доступ осуществляется с помощью специальных подпрограмм.
Основной является процедура SEEK. В ее вызове задается имя файловой переменной и номер того элемента файла, который становится доступным после выполнения вызова. Номер задавётся выражением типа Longlnt. Например, после вызова:
Seek (f, 2)
доступным становится третий элемент, поскольку нумерация начинается с 0:
Значение именно этого элемента будет читаться при выполнении вызова процедуры ввода read, или этому элементу будет что-то присваиваться при выполнении write. В обоих случаях доступным станет следующий элемент:
Отметим, что вызов процедуры Seek записывается после открытия файла с помощью reset, и после него можно как читать, так и записывать элементы файла, т.е. режим доступа не имеет значения.
В системе Turbo Pascal есть также несколько вспомогательных процедур, которые применяются вместе с процедурой Seek.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.