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

6.6. Файловые типы

Файл - это область памяти на внешнем запоминающем устройстве, предназначенная для хранения информации.

В языке Паскаль файл определяется как структура, представляющая собой последовательность компонент одного типа, расположенных на внеш-нем устройстве.

Данные могут как записываться в файл, так и читаться из него.

Файловый тип определяется следующим образом: TYPE typnam = FILE OF T , где typnam - имя файлового типа; T - базовый тип компонент файла. Базовый тип комопнент - любой, в том числе и структурный, кроме файло-вого.

Файл можно представить как последовательность комопонент (рис.6.4). Компоненты файла считаются пронумерованными, начальная компонента имеет нулевой номер.

С файлом связано понятие текущего указателя, который существует неявно и указывает на конкретную компоненту.

комп 0 комп 1 ....... комп k .......

текущий указатель

Рис.6.4. Структура файла

Пример объявления файлов: TYPE Ftyp = FILE OF real ; fstr = FILE OF STRING[20] ; VAR f1,f2 : Ftyp; af : fstr; bf : FILE OF ARRAY[[1..25] OF student .

Для файлов определен набор операций, реализуемых с помощью специальных процедур и функций (F - файловая переменная):

Установочные и завершающие операции

Процедура Assign(F,Name)

устанавливает связь между файлом на внешнем запоминающем устройстве и программой. Name - имя файла (типа STRING).

Процедура Reset(F)

открывает существующий файл для чтения. Текущий указатель устанавливается на нулевой элемент.

Процедура Rewrite(F)

открывает файл для записи. Если файл существует, то она очищает его. Текущий указатель устанавливается на нулевой элемент.

Процедура Close(F)

завершает работу с файлом и закрывает его.

Операции чтения-записи

Процедура Read(F,D1,D2... Dn )

реализует чтение данных из файла в программу. D1,D2... Dn - переменные, тип которых должен совпадать с базовым типом файла F.

Процедура Write(F,D1,D2... Dn )

выполняет запись данных в файл. D1,D2...Dn - переменные, тип которых должен совпадать с базовым типом файла F. После записи очередной компоненты текущий указатель перемещается в следующую позицию.

Перемещение по файлу

Процедура Seek(F,p)

устанавливает текущий указатель в позицию с номером p:longint .

Процедура Truncate(F)

отсекает от файла "хвостовую" часть, начиная с позиции текущего указателя.

Функция FileSize(F):longint

возвращает общее количество компонент файла.

Функция FilePos(F):longint

возвращает номер компоненты, на которую установлен текущий указатель.

Функция EoF(F):Boolean

возвращает TRUE, если достигнут конец файла (т.е. текущий указатель показывает на пустую позицию) и FALSE в противном случае.

Пример 6.6.1. Продемонстрировать запись в файл и чтение из файла данных о группе студентов.

PROGRAM Stgr;

CONST n = 25;

TYPE student = RECORD

fam : STRING[20];

gr : integer

END;

studgrup = ARRAY[1..n] OF student;

VAR one : student;

grup : studgrup;

fs : FILE OF student;

fg : FILE OF studgrup;

k : integer;

BEGIN

{ Ввод данных о группе студентов }

FOR k:=1 TO n DO

BEGIN

WriteLn('Студент номер ', k);

Write('Фамилия : '); ReadLn(grup[k].fam);

Write('Год рождения : '); ReadLn(grup[k].gr);

END;

{Записать в файл 'Grup.std' данные о группе студентов}

Assign(fs, 'Grup.std');

Rewrite(fs);

FOR k:=1 TO n DO Write(fs, grup[k]);

Close (fs);

{ Возможен и такой вариант

Assign(fg, 'Grup1.std');

Rewrite(fg);

Write(fg, grup);

Close (fg);

}

{ Прочитать из файла 'Grup.std' и отпечатать фамилии }

{ всех студентов группы }

Assign(fs, 'Grup.std');

Reset(fs);

FOR k:=1 TO FileSize(fs) DO

BEGIN

Read(fs, one);

WriteLn(one.fam)

END;

{ Можно и так:

Assign(fs, 'Grup.std');

Reset(fs);

WHILE NOT EoF(fs) DO

BEGIN Read(fs,one);

WriteLn(one.fam)

END;

}

Close(fs)

END.

Задачи

6.6.1. Записать в файл массив из 1000 чисел.

6.6.2. Имеется файл, содержащий 1000 чисел. Переписать в другой файл только положительные числа.

6.6.3. Имеется файл с данными о группе студентов. Сформировать два файла с данными о лицах мужского и женского пола раздельно.

6.6.4. Файл с данными о группе студентов прочитать в обратном порядке (от конца к началу). Имя файла задается с клавиатуры.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]