Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
60
Добавлен:
18.05.2015
Размер:
176.13 Кб
Скачать

ЗАПИСЬ И ЧТЕНИЕ ФАЙЛА

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

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.