Структуры (записи) | Работа с файлами (11_68_pol) (68 часов в уч. год)

Планирование уроков на учебный год (по учебнику К.Ю. Полякова, Е.А. Еремина, сокращённый курс, по 2 часа в неделю)


Уроки 38 - 39
Структуры (записи)
(§39. Структуры (записи))



Содержание урока

Зачем нужны структуры?

Объявление структур

Обращение к полю структуры

Работа с файлами

Сортировка

Вопросы и задания

Задачи


Работа с файлами


В программах, работающих с базами данных, необходимо читать массивы структур из файла и записывать в файл. Конечно, можно хранить структуры в текстовых файлах, например, записывая все поля одной структуры в одну строку и разделяя их каким-то символом-разделителем, который не встречается внутри самих полей.

Но есть более грамотный способ, который позволяет выполнять файловые операции проще и надёжнее (с меньшей вероятностью ошибки). Для этого нужно использовать файлы специального типа, которые называются типизированными. Все записываемые в них данные должны иметь одинаковый тип. В отличие от текстовых файлов данные в типизированных файлах хранятся во внутреннем формате, т. е. так, как они представлены в памяти компьютера во время работы программы. Например, можно сделать файл целых чисел или логических величин.

В данном случае нас интересует файл структур типа ТВоок, так что файловая переменная F для работы с типизированным файлом должна быть объявлена так:

var F: file of TBook;

Запись структуры в файл выполняется стандартным способом:

Assign(F,'books.dat');
Rewrite(F);
В.author:='Тургенев И.С.1;
В.title:='Муму';
В.count:=2; write(F,В);
Close(F);

Напомним, что процедура Assign связывает файловую переменную с файлом на диске, процедура Rewrite открывает файл на запись, а процедура Close — завершает запись на диск и закрывает файл.

Процедура Write, определив, что файловая переменная F связана с типизированным файлом структур, записывает в файл одну структуру во внутреннем формате. При попытке передать этой процедуре переменную другого типа произойдёт ошибка и аварийный останов программы.

С помощью цикла можно записать в файл весь массив структур:

for i:=l to N do 
write(F,Books[i]);

Прочитать из файла одну структуру и вывести её поля на экран можно следующим образом:

Assign(F,'books.dat1);
Reset(F);
Read(F,В);
Writeln(В.author,	',B.title,', ',B.count);
Close(F);

Процедура read, получив ссылку F на типизированный файл, может принимать в качестве следующих параметров только структуры типа TBook.

Если заранее известно, сколько структур записано в файле, при чтении их в массив можно применить цикл с переменной:

for i:=1 to N do
read(F,Books[i]);

Если же число структур неизвестно, нужно выполнять чтение до тех пор, пока файл не закончится, т. е. функция Eof не вернёт истинное значение:

i :=0;
while not eof(F) do begin
i:=i+l;
Read(F,Books[i]);
end;

Здесь целая переменная i играет роль счётчика: в ней на каждом шаге записано количество фактически прочитанных структур.

Следующая страница Сортировка



Cкачать материалы урока







Наверх