
- •Лекция 7 (часть 3)
- •ФАЙЛЫ 1. ОПИСАНИЕ ФАЙЛОВ
- •Любой файл имеет три характерные особенности. Во-первых, у него есть
- •Файлы по методу доступа к их
- •По отношению к программе файлы могут быть внешними и внутренними.
- •Файлы, которые существуют вне программы, называют внешними файлами. В качестве носителей внешних файлов
- •Пример.
- •Доступ к элементам файла осуществляется через указатель файла (буферная переменная). При чтении
- •Имена файлов
- •Перед именем может указываться так называемый путь к файлу:
- •Максимальная длина имени вместе с путем - 79 символов, например:
- •2. СТАНДАРТНЫЕ ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ФАЙЛАМИ
- •Reset(var F:file); — открывает файл F для чтения. При этом указатель файла устанавливается
- •Сlose (var F:file); - закрывает файл F;
- •Рассмотрим пять основных операций с внешними файлами:
- •ЧТЕНИЕ ФАЙЛА
- •Тип переменных XI, Х2…..XN должен соответствовать базовому типу элементов файла (это условие не
- •ЗАПИСЬ В ФАЙЛ
- •Процедура Rewrite осуществляет подготовку к записи информации в файл F (очищает файл и
- •ДОБАВЛЕНИЕ ДАННЫХ К ФАЙЛУ
- •ЗАПИСЬ И ЧТЕНИЕ ФАЙЛА
- •ПРЯМАЯ ВЫБОРКА ЭЛЕМЕНТОВ ФАЙЛА
- •Пример, Пусть с помощью программы Prl (см. выше) был создан файл F, содержащий
- •ТЕКСТОВЫЕ ФАЙЛЫ
- •Для работы с текстовыми файлами наряду с
- •СТАНДАРТНЫЕ ФАЙЛЫ
- •Когда начинается выполнение программы, файлы Input и Output открываются автоматически. После завершения работы
- •В Турбо-Паскале, так же как и в операционной системе MS-DOS, вся внешняя аппаратура
- •ПРИМЕРЫ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ФАЙЛОВ
- •Пример 2. Пусть задан файл F, каждый элемент которого представляет собой запись, содержащую
ЗАПИСЬ И ЧТЕНИЕ ФАЙЛА
Пусть необходимо сначала создать некоторый файл, а потом найти в нем определенный элемент. Для этого надо выполнить следующие действия:
1.открыть файл для записи (Rewrite);
2.записать данные в файл (Write);
3.закрыть файл (Close);
4.открыть файл для чтения (Reset);
5.читать файл, пока не будет найден нужный элемент (Read);
6.закрыть файл (Close);
Замечание. П.3 выполнять не обязательно.
ПРЯМАЯ ВЫБОРКА ЭЛЕМЕНТОВ ФАЙЛА
Турбо-Паскаль позволяет осуществить прямой выбор элементов файла. Для этого используется процедура Seek:
Seek(F,N);
где F — имя файла, который был ранее открыт процедурой Reset; N — целое положительное число или выражение, соответствующее порядковому номеру элемента в файле.
После выполнения процедуры Seek первое обращение к операторам Read или Write будет связано с N-м элементом файла. Каждое повторное использование этих операторов будет осуществлять последовательное чтение или запись элементов файла, начиная с (N+l)- ro элемента.
Используя процедуру Seek, можно корректировать отдельные элементы файла непосредственно. Для этого необходимо выполнить следующие действия:
1.открыть корректируемый файл (Reset);
2.подвести указатель файла к корректируемому элементу (с помощью Seek);
3.считать корректируемый элемент (Read);
4.откорректировать элемент файла;
5.повторить процедуру подвода указателя файла (Seek);
6.записать откорректированный элемент (Write);
7.закрыть файл (Close).
Пример, Пусть с помощью программы Prl (см. выше) был создан файл F, содержащий числа 1, 2, 3, 4, 5. Необходимо вместо последних трех элементов файла F записать числа 30, 40, 50.
program РгЗ;
var F: file of integer; X, I: integer;
begin Assign(F,'F'); Reset(F); for I: =3 to 5 do begin
Seek(F, I-1); Read(F,X); X:=10*I; Seek(F, I-1); Write(F,X) end;
Reset(F);
while not Eof(F) do begin Read(F,X); Writeln(X) end;
Close(F);
end.
В результате выполнения программы PR3 на печать будет выведено:
1
2
30
40
50
ТЕКСТОВЫЕ ФАЙЛЫ
Особым типом файлов являются текстовые файлы. Эти файлы содержат некоторый текст, который состоит из обычных символов (например, букв алфавита и цифр). Символы текстового файла разбиты строки, подобно тому как они записываются на бумаге.
Описание текстового файла имеет следующий вид: var имя_файла:text;
Здесь text — стандартный идентификатор, точно такой же, как real, char и т.д.
Отличие текстового файла (типа text) от файла типа char (или string) заключается в том, что текстовый файл состоит из
последовательности строк различной длины, каждая из которых содержит величины типа char и заканчивается специальным символом конца строки. Для определения конца строки используется функция
Еoln(var F:text):boolean
Она принимает значение True, если достигнут конец строки, и значение False — в противном случае. Если в Eoln параметр F
опущен, то подразумевается использование стандартного файла ввода Input.
Для работы с текстовыми файлами наряду с
вышерассмотренными процедурами и функциями (кроме Seek, FilePose, FileSize) используются
следующие стандартные процедуры:
Append (var F:text); — открытие уже существующего текстового файла F для добавления данных в конец файла;
Writeln(var F:file);— завершение текущей строки текстового файла F (при его записи);
Readln(var F:file); — переход к началу следующей строки текстового файла F (при его чтении);
Writeln(var F:fiie; var XI,X2,..,XN);— запись в текотовый файл F значений переменных XI, Х2, ..., XN с завершением текущей строки;
Readln(var F:file; var X1,X2,...,XN);-чтение N символов файла F с переходом к новой строке.
СТАНДАРТНЫЕ ФАЙЛЫ
Стандартные файлы — это особый тип заранее определенных файлов, поставленных в соответствие
внешним устройствам ПЭВМ. Физически эти файлы являются драйверами (специальными
программами), поддерживающими операции ввода- вывода между процессором ПЭВМ и конкретными внешними устройствами. К числу таких стандартных файлов относятся следующие:
Input — доступный только для чтения текстовый файл, связанный о клавиатурой;
Output — доступный только для записи текстовый файл, связанный с дисплеем;
Lst — доступный только для записи (вывода) текстовый файл, связанный с устройством печати.
Когда начинается выполнение программы, файлы Input и Output открываются автоматически. После завершения работы
программы эти файлы автоматически закрываются. В связи с этим к ним нельзя применять процедуры Append, Reset, Rewrite, Close. При использовании операторов ввода-вывода к
файлам Input, Output имена этих файлов можно не указывать.
Файл Lst введен для облегчения использования в программе устройства печати. он описан в стандартном модуле Printer и связан с устройством Lptl (см. ниже). Поэтому нет необходимости описывать этот файл в программе, открывать и закрывать его. Достаточно лишь после заголовка программы указать оператор
uses Printer;
Тогда, если в программе встречается, например, оператор
Write(Lst,'текст',Х, Y);
вывод текста и значений переменных X, Y будет осуществлен на принтер.
В Турбо-Паскале, так же как и в операционной системе MS-DOS, вся внешняя аппаратура (клавиатура, принтер, дисплей и др.) рассматривается как устройства. С точки зрения программиста устройство можно рассматривать как файл, для которого можно использовать стандартные процедуры и функции, рассмотренные выше.
Устройства MS-DOS реализованы с помощью зарезервированных имен, имеющих специальный смысл. Перечислим некоторые из них.
Con — консоль, посредством которой выводимая информация пересылается на экран дисплея, а вводимая информация воспринимается с клавиатуры. В процессе ввода допускается редактирование вводимой информации с отображением ее на экране дисплея. При нажатии клавиши <Ctrl-Z> генерируется символ конца файла.
Lptl, Lpt2, Lpt3 — устройства печати. Если к ПЭВМ присоединено
только одно устройство печати, то на него ссылаются как на Lptl или Ргn.
Coml, Com2 — последовательные коммуникационные порта
ПРИМЕРЫ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ФАЙЛОВ
Пример 1. Составим программу для решения следующей задачи: из двух отсортированных в возрастающем порядке файлов FL1 и FL2 необходимо получить новый файл FL, отсортированный в том же порядке.
program Sort;
var FL1,FL2,FL: file of real; X1,X2,X: real; begin
Assign(FL,'FL'); Assign(FL1,'FL1'); Assign(FL2,'FL2'); Reset(FLl); Read( FL1, X1);
Reset(FL2); Read(FL2, X2); Rewrite(FL);
while not(Eof(FLl) or Eof(FL2)) do begin
if X1>X2 then begin X:=X2;
Read( FL2,X2) end
else begin X:=X1; Read( FLl,Xl) end; Write(FL, X) end;
if X1>X2 then Write(FL,X2.Xl) else Write(FL,Xl,X2);
while not Eof(FLl) do begin
Read(FLl,Xl);
Write(FL,Xl)
end;
while not Eof(FL2) do begin
Read(FL2,X2);
Write(FL,,X2)
end;
Close(FL); Close(FLl); Close(FL2); end.