СРЕДСТВА ОБРАБОТКИ ФАЙЛОВ




Лекция 2.5. Файлы

Файлом называется совокупность данных, записанная во внешней памяти под определенным именем.

Каждый файл во внешней памяти имеет обозначение, которое состоит из двух частей: имени и расширения. В имени файла может быть от 1 до 8 символов. Расширение начинается с точки, за которой следуют от 1 до 3 символов, например:

command.com, turbo.exe, autoexec.bat, proba.pas

Любой файл имеет три характерные особенности.

Во-первых, файл имеет имя.

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

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

В большинстве случаев файлы состоят из текстовых строк или записей. Для описания файла используется словосочетание file of.

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

type

< имя типа>: <тип компонентов >;

var

<F>: file of < имя типа >;

<R>: < имя типа >;

где F - файловая переменная, R - переменная для доступа к полям записи.

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

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

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

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

СРЕДСТВА ОБРАБОТКИ ФАЙЛОВ

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

Assign(var < имя файловой переменной >:file, < имя файла >:string);

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

Для работы с файлом его прежде всего необходимо открыть. В Паскале для этого предусмотрены две процедуры:

Reset(var < имя файловой переменной >:file); - открывает уже существующий файл;

Rewrite(var < имя файловой переменной >:file); - создает и открывает новый файл. Использование этой процедуры требует особого внимания. При попытке создать и открыть новый файл с
именем уже существующего файла данных действие процедуры rewrite сведется к удалению всех данных и созданию нового пустого файла с тем же именем.

Операция закрытия файла является логическим окончанием работы с любым открытым файлом. Для этого служит процедура

Close(var < имя файловой переменной >:file);

Использование процедуры Close позволяет устранить связь файловой переменной с внешним файлом, установленную с помощью процедуры Assign.

Пример. Полная цепочка команд для создания простого тестового файла с именем WORK.TXT:

var F:text;

begin

Assign(F,'WORK.TXT');

Rewrite(F);

Write(F, 'Простой текстовый файл' );

Close(F);

end.

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

Rename(var < имя файловой переменной >:file,< новое имя >:string);

Процедура переименовывает неоткрытый файл любого типа. Новое имя задается строкой <новое имя>.

Erase(var < имя файловой переменной >:file);

Процедура удаляет неоткрытый внешний файл любого типа,
задаваемый переменной <имя файловой переменной>.

Пример. Удаление или переименование файла.

var

F:file;

Ch:char;

St:string;

begin

Write( 'Введите имя нового файла: ');

Readln(St);

Assign(F,St);

Write( 'Удаление (У), переименование (П), выход (В) ');

Readln(Ch);

Case Ch of

'У','у' :Erase(F);

'П','п':begin

Write( 'Введите новое имя файла' );

Readln(St);

Rename(F,St);

end;

'П','п': Halt(1);

end;

end.

В примере альтернативный выбор тех или иных действий зависит целиком оттого, что будет введено с клавиатуры.

Компилятор Паскаля поддерживает три типа файлов: типизированные, не типизированные и текстовые.

ТИПИЗИРОВАННЫЕ ФАЙЛЫ

Длина любого компонента типизированного файла строго постоянна, что дает возможность организовать прямой доступ к каждому из них (т.е. доступ к компоненту по его порядковому номеру).

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

Type

FileRec = record

end;

var

F:file of FileRec;

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

Процедура READ. Обеспечивает чтение очередных компонентов типизированного файла. Формат обращения:

READ(<ф.п.>,<сп.ввода>)

Здесь <сп.ввода> — список ввода, содержащий одну или более переменных такого же типа, что и компоненты файла.

Файловая переменная <ф.п.> должна быть объявлена предложением FILE OF и связана с именем файла процедурой ASSIGN. Файл необходимо открыть процедурой RESET. Если файл исчерпан, обращение к READ вызовет ошибку ввода - вывода.

Процедура WRITE. Используется для записи данных в типизированный файл. Формат обращения:

WRITE(<ф.п.>,<сп.вывода>)

Здесь <сп.вывода> — список вывода, содержит одно или более выражений того же типа, что и компоненты файла.

В типизированных файлах их содержимое рассматривается как последовательность записей определенной структуры. Единицей измерения такого набора данных является сама запись. Длина записи определяется как SizeOf(FileRec). Так как длина любого компонента типизированного файла строго постоянна, это дает возможность организовать прямой доступ к любому компоненту по его порядковому номеру, поэтому типизированные файлы часто называют файлами прямого доступа.

Процедура Seek. Смещает указатель файла к требуемому компоненту. Формат обращения



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: