Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IT-2_P_2.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
122.65 Кб
Скачать

Лабораторная работа 13 «Файлы»

Цель работы:

Изучение операций при работе с файлами.

Порядок выполнения работы:

  1. Изучить теоретическую часть работы;

  2. Ответить на контрольные вопросы и разобрать примеры;

  3. Выполнить все задачи для самостоятельного выполнения.

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

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

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

Файл, - это потенциально бесконечная последовательность компонент одного и того же типа. Количество компонент в файле заранее не оговаривается. Объявляется тип данных файл в разделе объявления типов с помощью служебного слова file, после которого указывается тип компонент файла (базовый тип). Базовым типом может быть любой тип, кроме типа file.

Type

f = file of integer;

Переменные типа f будут файлами с целочисленными компонентами.

Для связи с файлом в программе необходимо описать и использовать файловую переменную. Объявить файловую переменную можно используя объявленный в разделе объявления типов файловый тип, например

Var

as12: f;

В таком случае вы сможете применять эту переменную как параметр процедур или функций. Можно также объявить файловую переменную непосредственно в разделе объявления переменных, но тогда подпрограммы для неё недоступны

Var

as: file of byte;

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

Файл может находится в различных состояниях:

1. файл закрыт;

2. файл открыт для записи;

3. файл открыт для чтения.

Установочные и завершающие операции при работе с файлами.

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.

Контрольные вопросы:

  1. Что такое файл?

  2. Из чего состоит файл?

  3. Какие основные операции применяются к файлам?

Задания для самостоятельного выполнения

1. Организовать файл вещественных чисел из N компонент. Заменить все положительные компоненты файла их квадратными корнями а все отрицательные компоненты их квадратами. Вывести содержимое файла до обработки и после обработки. Определить и вывести на экран максимальное число в файле.

2. Организовать файл целых чисел из N компонент. Выполнить сортировку файла по возрастанию. Вывести содержимое файла до обработки и после обработки.

3. Организовать файл целых чисел из N компонент. Удалить из файла все отрицательные компоненты. Вывести содержимое файла до обработки и после обработки.

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