Программирование на языке Паскаль Файлы комбинированного типа (записей)
2 Структуры (в Паскале – записи) Структура (запись) – это тип данных, который может включать в себя несколько полей – элементов разных типов (в том числе и другие структуры). Свойства: автор (строка) название (строка) год издания (целое число) количество страниц (целое число) Задача: объединить эти данные в единое целое Размещение в памяти авторназвание год издания количество страниц 40 символов80 символовцелое
3 Новый тип данных – запись const N = 10; var Book: TBook; // одна запись aBooks: array[1..N] of TBook; // массив const N = 10; var Book: TBook; // одна запись aBooks: array[1..N] of TBook; // массив Объявление типа: type TBook = record author: string[40]; // автор, строка title: string[80]; // название, строка year: integer;// год издания, целое pages : integer; // кол-во страниц, целое end; type TBook = record author: string[40]; // автор, строка title: string[80]; // название, строка year: integer;// год издания, целое pages : integer; // кол-во страниц, целое end; Память не выделяется! ! ! Объявление переменных и массивов: TBook – Type Book («тип книга») – удобно!
4 Файлы записей Объявление файла: var F: file of TBook; Book: TBook; // одна запись aBooks: array[1..100] of TBook; // массив var F: file of TBook; Book: TBook; // одна запись aBooks: array[1..100] of TBook; // массив Assign(F, 'books.dat'); { связать с файлом} Rewrite(F); { открыть файл для записи } write (F, Book); { запись в файл} for i:=1 to 5 do write(F, aBook[i]); { запись в файл} Close(F); { закрыть файл } Assign(F, 'books.dat'); { связать с файлом} Rewrite(F); { открыть файл для записи } write (F, Book); { запись в файл} for i:=1 to 5 do write(F, aBook[i]); { запись в файл} Close(F); { закрыть файл } Запись в файл:
5 Чтение из файла Известное число записей: Assign(F, 'books.dat'); { связать с файлом} Reset(F); { открыть для чтения } Read(F, Book); { чтение } for i:=1 to 5 do Read(F, aBook[i]); { чтение } Close(F); { закрыть файл } Assign(F, 'books.dat'); { связать с файлом} Reset(F); { открыть для чтения } Read(F, Book); { чтение } for i:=1 to 5 do Read(F, aBook[i]); { чтение } Close(F); { закрыть файл } «Пока не кончатся»: count := 0; while not eof(F) do begin count := count + 1; { счетчик } Read(F, aBook[count]); { чтение } end; count := 0; while not eof(F) do begin count := count + 1; { счетчик } Read(F, aBook[count]); { чтение } end; В чем может быть проблема! ? ? пока не дошли до конца файла F EOF = end of file пока не дошли до конца файла F EOF = end of file
6 Пример программы Задача: в файле books.dat записаны данные о книгах в виде массива структур типа TBook (не более 100). Установить для всех 2008 год издания и записать обратно в тот же файл. type Tbook … ; const MAX = 100; var aBooks: array[1..MAX] of TBook; i, N: integer; F: file of TBook; begin { прочитать записи из файла, N - количество } for i:=1 to N do aBooks[i].year := 2008; { сохранить в файле } end. type Tbook … ; const MAX = 100; var aBooks: array[1..MAX] of TBook; i, N: integer; F: file of TBook; begin { прочитать записи из файла, N - количество } for i:=1 to N do aBooks[i].year := 2008; { сохранить в файле } end. type TBook … ; полное описание структуры
7 Пример программы Чтение «пока не кончатся»: Assign(f, 'books.dat'); Reset(f); N := 0; while not eof(F) and (N < MAX) do begin N := N + 1; read(F, aBooks[N]); end; Сlose(f); Assign(f, 'books.dat'); Reset(f); N := 0; while not eof(F) and (N < MAX) do begin N := N + 1; read(F, aBooks[N]); end; Сlose(f); Assign(f, 'books.dat'); { можно без этого } Rewrite(f); for i:=1 to N do write(F, aBooks[i]); Close(f); Assign(f, 'books.dat'); { можно без этого } Rewrite(f); for i:=1 to N do write(F, aBooks[i]); Close(f); Сохранение: чтобы не выйти за пределы массива