- •10. Файлы
- •Введение
- •10.2. Классификация файлов в турбо-паскале
- •10.3. Объявление файла
- •10.4. Открытие и закрытие файла
- •10.5. Чтение и запись
- •10.6. Текстовые файлы
- •Program Demo; {Вывод на экран чисел из файла}
- •10.7. Нетипизированные файлы
- •10.8. Пример. Программа работы с файлами
- •Фамилия _
- •Фамилия Оценка 1 Оценка 2 Оценка 3
Var
A:array[1..100]
of
integer; {входной массив} nA
: integer;
{фактический объем массива} j
: integer;
{рабочая переменная} fl
: text;
{файловая переменная} begin
Assign(fl,’input.txt’); {$I-} reset(fl); {$I+} if
IOResult=0 then
begin
readln(fl,nA);
{из текущей строки взять
только
значение числа и после этого
перейти
на начало следующей строки}
writeln(’Объем
массива = ’,nA);
for
j:=1 to
nA do
begin
read(fl,A[j]);
write(A[j]:4);
if
(j mod
3)=0 then
writeln;
{сменить
строку} {end
if}
end;
{for} if
(nA mod
3)<>0 then
writeln;
{сменить
строку} {end
if}
end else
writeln(’Ошибка
открытия
файла’); {end
if} end.Program Demo; {Вывод на экран чисел из файла}
В результате выполнения указанного фрагмента на экране будет сформирован следующий текст
Объем
массива = 5 12
-3 5 70
65
В заключение отметим, что в Турбо-Паскале имеется еще ряд процедур и функций для работы с файлами. Но слушателю предлагается изучить их самостоятельно. Здесь также не будут рассматриваться нетипизированные файлы и операции с ними.
10.7. Нетипизированные файлы
Нетипизированный файл – файл, элементами которого являются байты, а типы данных, размещенных в этих байтах безразличны. Рассмотрим операторы Паскаля, которые предусмотрены для работы с нетипизированными файлами.
Объявление:
var
<fp>
: file;
{здесь
fp
– файловая
переменная}
Назначение файла:
assign
( <fp>, <имя
физического файла>);
Открытие файла:
reset (<fp>, <size>); |
Открыть файл для чтения, установив размер записи равным size байтов. |
rewrite (<fp>, <size>); |
Открыть файл для записи, установив размер записи равным size байтов. |
Примеры.
reset(FromF,
1); {открыть файл с размером записи в 1
байт} reset(fil,
256); {открыть файл с размером записи в
256 байтов}
rewrite(ToF,
12); {открыть файл с размером записи в 12
байт}
Чтение и запись
BlockRead(<fp>,<buf>, <size>,<k>); |
Прочитать size записей из файла fp в буфер buf. Вернуть в переменной k, сколько записей прочитано фактически. |
BlockWrite(<fp>,<buf>, <size>,<k>); |
Записать size записей в файл fp из буфера buf. Вернуть в переменной k, сколько записей помещено в файл фактически. |
Запись процедуры закрытия файла совпадает с рассмотренными выше.
Примеры использования нетипизированного файла можно найти в литературе и во встроенной в Турбо Паскаль справочной системе.
10.8. Пример. Программа работы с файлами
Задача. Разработать простую программу сопровождения базы данных.
База данных должна храниться на диске в виде типизированного файла, содержащего следующие сведения о результатах экзаменов студентов: фамилия и три оценки, полученные на экзаменах. Названия предметов не указываются, это сделано для упрощения программы. Допустимые значения оценок: 2, 3, 4, 5.
Требуемые операции:
занесение новых данных с клавиатуры
просмотр содержимого базы данных на экране
сохранение данных в типизированном файле
загрузка (восстановление) данных из файла
вывод содержимого базы данных в текстовый файл в табличном виде
поиск информации в базе по ключу: поиск и отображение на экране сведений о студентах, имеющих неудовлетворительные оценки.
Примечание. В оперативной памяти содержимое базы данных должно размещаться в массиве записей.
Вначале приведем сценарий.
П
Операции базы
данных:
добавить запись
(1)
просмотреть
содержимое (2)
искать неуспевающих
(3)
вывести в текстовый
файл (4)
сохранить базу
(5)
конец работы (6) Введите
номер операции _
Примечание. Восстановление содержимого базы данных из типизированного файла (загрузка) производится автоматически в момент запуска программы из файла с именем ‘group.dat’. Если файл с этим именем не найден, база создается вновь, как пустая. Запись в этот файл должна происходить по желанию пользователя (операция 5), только в том случае, если в этот момент массив не пуст.
После того как пользователь вводит номер операции, в зависимости от введенного номера, выполняются следующие действия:
Операция 1. «Добавить запись».