Файлы
Для хранения информации
полученной в результате работы программ, используют различные внешние
запоминающие устройства: гибкие магнитные диски, винчестера, магнитные ленты
и другие носители. Использование внешних запоминающих устройств для хранение
информации является наиболее надёжным и удобным способом хранения
информации.
Физический файл.
Организация хранения
информации зависит от конкретного носителя информации, и подробно
рассматриваться нами не будет. В общем случае хранение информации
организовано в виде именованных областей внешней памяти, называемых файлами.
Файл в таком понимании называют физическим файлом.
Логический файл.
Для организации работы с
физическими файлами в языках программирования предусмотрены специальные
структуры данных - тип данных файл. Файл в таком понимании называют
логическим файлом, так как в этом случае он представляет собой лишь
логическую модель хранения информации не зависящую от организации
конкретного физического файла.
Тип данных - файл.
Файл, - это потенциально
бесконечная последовательность компонент одного и того же типа. Количество
компонент в файле заранее не оговаривается. Объявляется тип данных файл в
разделе объявления типов с помощью служебного слова file, после которого
указывается тип компонент файла (базовый тип). Базовым типом может быть
любой тип, кроме типа file.
Type
f = file of integer;
Переменные типа f будут файлами с целочисленными
компонентами.
Файловые переменные.
Объявить файловую
переменную можно используя объявленный в разделе объявления типов файловый
тип, например
Var
as12: f;
В таком случае вы сможете применять эту переменную как
параметр процедур или функций. Можно также обявить файловую переменную
непосредственно в разделе объявления переменных, но тогда подпрограммы для
неё недоступны
Var
as: file of byte;
Работа с файлами.
Для простоты и наглядности
файловую переменную можно изобразить как последовательность однотипных
компонент хранящуюся на магнитной ленте. В самом начале записывается имя
файла, после него компоненты файла, а в самом конце признак конца файла.
Считывание или запись информации из файла осуществляется с помощью
воображаемой магнитной головки, которую мы в дальнейшем будем называть
текущим указателем.
Файл может находится в
различных состояниях:
- файл закрыт;
- файл открыт для записи;
- файл открыт для чтения.
Assign(var f; name:
string);
Процедура Assign
предназначена для связывания файловой переменной (логического файла) с
конкретным файлом на диске (физическим файлом). f - имя файловой переменной
(идентификатор);
name - строка содержащая имя физического файла в операционной системе MS-DOS.
Имя файла может содержать путь к файлу (path), например
c:\turbo\link\std.dat
При отсутствии пути к имени файла подразумевается файл
находящийся в текущем катлоге.
Процедура
Assign(ff,'bank.dat') связывает файловую переменную (логический файл) ff с
физическим файлом на диске bank.dat. После выполнения этой процедуры
файловая переменная ff будет представителем в программе физического файла на
диске bank.dat.
Reset(var f);
Процедура Reset
предназначена для подготовки к чтению или к записи существующего физического
файла, связанного с файловой переменной f. Файл должен обязательно
существовать. Если файл не пуст, текущий указатель перемещается к первой
компоненте файла.
В противном случае текущий указатель перемещается к концу файла.
Файл становится открытым для чтения и записи.
Rewrite(var f);
Процедура Rewrite
предназначена для создания нового файла, или для подготовки к записи с
начала существующего файла (к перезаписи). Текущий указатель перемещается к
началу файла. Если файл существует, то его предыдущее содержимое
уничтожается. Если файла нет, то он будет создан.
Файл становится открытым
для записи и закрытым для чтения.
Close(var f);
Закрывает открытый файл.
Файл становится закрытым для чтения и закрытым для записи. Ни в коем случае
не следует пренебрегать этой операцией. Оставшийся открытым файл, как
правило, может вызвать аварийную ситуацию.
Операции ввода-вывода.
Read(f,v1[,v2,...,vn]);
Процедура Read
предназначена для чтения значений из файла в программу. f - файловая
переменная. Остальные параметры - переменные в которые будет помещаться
информация из компонент файла. Тип этих переменных должен совпадать с
базовым типом файла. При прочтении компоненты из файла текущий указатель
перемещается к следующей компоненте.
Write((f,v1[,v2,..,vn]);
Процедура Write
предназначена для записи информации в файл. f - файловая переменная.
Остальные параметры - переменные, содержимое которых будет помещено в файл.
Перемещения по файлу.
Все компоненты
типизированных файлов проиндексированы начиная с нуля, что позволяет
организовать произвольное перемещение по файлу и доступ к любой компоненте
такого файла в любой момент времени.
Seek(var f; n: longint);
Перемещает текущий
указатель в файле f на позицию номер n.
Truncate(var f);
Усекает файл (обрезает его)
на текущей позиции.
FileSize(var f):
longint;
Возвращает текущий размер
файла (номер последней компоненты).
FilePos(var f): longint;
Возвращает положение
текущего указателя в файле.
EoF(var f): boolean;
Функция определения конца
файла. Возвращает значение true, если текущий указатель находится за
последней компонентой файла, false в противном случае.
Пример программы.
Задача. Организовать файл
целых чисел из N компонент. Определить и вывести на экран среднее
арифметическое компонент файла. Вывести содержимое файла на экран.
PROGRAM EX_30_1;
Uses Crt;
Type
ff=file of integer; {декларация типа файл целых чисел}
VAR
log_f: ff; {декларация логического файла}
procedure zapolnenie (var f: ff); {заполнение файла}
var
N: integer; {количество компонент}
i: integer; {параметр цикла}
komp: integer; {компонента файла}
begin
Write('Введите количество компонент в файле: ');
Readln(N);
Rewrite(f); {открытие фала для записи}
Writeln('Введите компоненты файла: ');
for i:=1 to N do
begin
Read(komp); {ввод компоненты с клавиатуры}
Write(f, komp); {и запись её в файл}
end;
Close(f); {закрытие файла!!!}
end;
procedure vyvod (var f: ff); {вывод файла на экран}
var
komp: integer; {компонента файла}
begin
Reset(f); {открытие файла для чтения}
while not eof(f) do {пока не конец файла делать}
begin
Read(f,komp); {чтение следующей компоненты файла}
Write(komp,' '); {и вывод её на экран}
end;
Close(f); {закрытие файла!!!}
Writeln;
end;
function sr_ar (var f: ff): real; {определение среднего ар.}
var
komp: integer; {компонента файла}
sum: real; {сумма компонент (счётчик)}
begin
Reset(f); {открыть файл для чтения}
sum:=0; {обнуление счётчика}
while not eof(f) do {пока не конец файла делать}
begin
Read(f,komp); {чтение следующей компоненты файла }
sum:=sum+komp; {увеличение счётчика суммы}
end;
sr_ar:=sum/FileSize(f); {а вот и результат}
Close(f); {закрытие файла!!!}
end;
BEGIN
Assign(log_f,'data.dat'); {файл log_f на диске имеет имя data.dat}
ClrScr;
zapolnenie(log_f);
Writeln('Содержимое файла: ');
vyvod(log_f);
Writeln('Среднее арифметическое компонент файла = ',sr_ar(log_f));
Repeat Until Keypressed;
END.
Контрольные вопросы
- Что называют физическим файлом?
- Что называют логическим файлом?
- Как связывается логический файл с физическим
файлом?
- Для чего и как открываются файлы?
- Как закрыть файл?
- Что называют текущим указателем?
- Опишите операции ввода-вывода для файлов.
- Опишите перемещение в среде типизированных
файлов.
Задания для
самостоятельного выполнения
- Организовать файл целых чисел из N компонент.
Определить сумму компонент файла имеющих нечётные индексы.
- Организовать файл вещественных чисел из N
компонент. Заменить все положительные компоненты файла их квадратными
корнями а все отрицательные компоненты их квадратами. Вывести содержимое
файла до обработки и после обработки.
- Организовать файл целых чисел из N компонент.
Определить и вывести на экран максимальное число в файле.
- Организовать файл целых чисел из N компонент.
Выполнить сортировку файла по возрастанию. Вывести содержимое файла до
обработки и после обработки.
- Организовать файл целых чисел из N компонент.
Удалить из файла все отрицательные компоненты. Вывести содержимое файла
до обработки и после обработки.
- Организовать файл целых чисел f из N компонент.
После этого организовать файлы g и h. В файл g записать все чётные числа
из файла f, а в h все нечётные. Вывести на экран содержимое файлов f, g
и h.
- Организовать символьный файл f из N компонент.
После этого организовать файл g содержащий все компоненты файла f в
обратном порядке. Вывести содержимое файлов на экран.
- Организовать файл символов из N компонент.
Определить символ, встречающийся в файле наиболее часто. Вывести на
экран этот символ и его количество в файле.
- Организовать файл целых чисел, состоящий из N
компонент, заменить все элементы файла от -10 до 10 на противоположные.
Вывести содержимое файла до и после обработки.
- Организовать файл целых чисел из N компонент.
Все числа, кратные 3 заменить их удвоенным произведением. Вывести
содержимое файла до и после обработки.
НАЗАД ДАЛЕЕ
|