Работа с файлами
В программах, работающих с базами данных, необходимо читать массивы структур из файла и записывать в файл. Конечно, можно хранить структуры в текстовых файлах, например, записывая все поля одной структуры в одну строку и разделяя их каким-то символом-разделителем, который не встречается внутри самих полей.
Но есть более грамотный способ, который позволяет выполнять файловые операции проще и надёжнее (с меньшей вероятностью ошибки). Для этого нужно использовать файлы специального типа, которые называются типизированными. Все записываемые в них данные должны иметь одинаковый тип. В отличие от текстовых файлов данные в типизированных файлах хранятся во внутреннем формате, т. е. так, как они представлены в памяти компьютера во время работы программы. Например, можно сделать файл целых чисел или логических величин.
В данном случае нас интересует файл структур типа ТВоок, так что файловая переменная 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 играет роль счётчика: в ней на каждом шаге записано количество фактически прочитанных структур.
Следующая страница Сортировка