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

6. Файловые типы и ввод-вывод

o Понятие файла

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

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

o Виды файлов языка: типизированные, текстовые, нетипизированные

файл из элементов фиксированного размера; элементами такого файла чаще всего являются записи;

файл из элементов переменного размера (нетипизированный файл); такой файл рассматривается просто как последовательность байтов;

текстовый файл; элементами такого файла являются текстовые строки.

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

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

var

F: file of TPerson;

К моменту такого объявления тип TPerson должен быть уже описан (см. выше).

Объявление переменной для работы с нетипизированным файлом выполняется с помощью отдельного слова file:

var

F: file;

Для работы с текстовым файлом переменная описывается с типом TextFile:

var

F: TextFile;

o Общие процедуры для работы с файлами

AssignFile Устанавливает ассоциативную связь между файловой переменной и внешним файлом.

BlockRead Читает несколько записей из файла в переменную.

BlockWrite Записывает несколько записей в файл.

CloseFile Разрывает ассоциативную связь между файловой переменной и файлом.

DeleteFile Удаляет файл с диска.

DiskFree Определяет количество свободного места на диске.

DiskSize Определяет размер указанного диска.

Eof Определяет, стоит ли указатель в конце файла.

Erase Удаляет файл, связанный с файловой переменной.

DiskSize Определяет размер указанного диска.

FileExists Проверяет, существует ли указанный файл.

FileGetAttr Возвращает атрибуты указанного файла.

FilePos Возвращает текущую позицию файлового указателя.

FileSearch Производит поиск файла в нескольких заданных каталогах.

FileSetAttr Устанавливает атрибуты файла.

FileSize Возвращает размер файла в байтах, а для файлов типа Record - количество записей.

FindClose Высвобождает память, выделенную процедурой FindFirst.

FindFirst Находит файл с заданным набором атрибутов по заданной маске в указанном каталоге.

FindNext Производит повторный поиск файла.

IoResult Возвращает статус ошибки последней выполненной операции ввода/вывода.

Read Читает данные из файла.

Rename Переименовывает файл.

RenameFile Переименовывает файл.

Reset Открывает существующий файл.

Rewrite Создает новый файл и открывает его.

Seek Устанавливает файловый указатель в заданную позицию.

Truncate Удаляет все записи в файле, находящиеся после текущей позиции.

Write Записывает данные в файл.

o Текстовые файлы

Тип TextFile определяет тип файла для содержания текстовых данных.

Текстовые файлы обеспечивают простой и удобный способ сохранения текстовых данных. Они обеспечивают простой механизм для чтения и записи численных данных, сохраненных как текст (см. Write), но более безопасно и более разумно использовать для этого структурированные записи, при сохранении чего-нибудь отличного от простых текстовых строк.

Однако текстовые файлы позволяют делать записи различной длины.

var

myFile : TextFile;

text : string;

begin

// Попытка открыть Test.txt файл для записи

AssignFile(myFile, 'Test.txt');

ReWrite(myFile);

// Закрытие файла

CloseFile(myFile);

// Повторное открытие файла для чтения

Reset(myFile);

// Отображение содержимого файла

while not Eof(myFile) do

begin

ReadLn(myFile, text);

ShowMessage(text);

end;

// Закрытие файла в последний раз

CloseFile(myFile);

end;

o Ввод-вывод из текстовых файлов

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

Итак, для выполнения операции чтения или записи необходимо произвести следующие действия:

1. Объявить файловую переменную необходимого типа.

2. При помощи функции AssignFile связать эту переменную с требуемым файлом.

3. Открыть файл при помощи функций Append, Reset, Rewrite.

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

5. Закрыть файл при помощи функции CloseFile.

7. Процедуры и функции

o Процедуры и функции

Описание процедуры состоит из заголовка и тела процедуры.

Заголовок состоит из ключевого слова procedure, за которым следует имя процедуры и, при необходимости, список параметров, заключенных в круглые скобки:

procedure <Имя> [(параметры)];

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

После заголовочной части следует тело процедуры, заключаемое в begin и end.

Процедуры могут быть встроенными.

Описание функции состоит из заголовка и тела. Однако описание заголовка имеет 2 отличия: прежде всего, для функций используется ключевое слово function. Кроме того, поскольку функции всегда возвращают результат, завершается строка заголовка типом возвращаемого значения. Таким образом, для объявления функции мы получаем следующий синтаксис:

function <Имя> [(параметры)] : <тип результата>;

Возвращаемое значение может быть любого типа, кроме файлового

o Общая структура подпрограмм

Описание подпрограммы состоит из трех частей: заголовка подпрограммы, локального описания и тела подпрограммы. Заголовок используется, чтобы явно ввести в программу новую подпрограмму и обозначить начало ее описания. Локальные описания представляют собой набор описаний типов, переменных, констант и других подпрограмм, которые действуют только в рамках данной подпрограммы. Тело подпрограммы - это логический блок begin/end, содержащий операторы и команды .

o Глобальные и локальные описания. Область действия имен

o Параметры

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

метрах-переменных информация может возвращаться обратно в вызывающий фрагмент программы, в измененном или первоначальном

(установленном при вызове подпрограммы) виде.

Существует еще один вид параметров — параметры для заполнения, ко-

торые предусмотрены только для обратной передачи данных из подпрог-

раммы в вызывающий фрагмент программы. Такие параметры аналогич-

ны параметрам-переменным, однако использование начальных значений

этих параметров в подпрограмме недопустимо. Delphi автоматически ос-

вобождает память, занятую под переменные, передаваемые в качестве

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

o Способы передачи параметров подпрограммам

Delphi поддерживает два механизма передачи параметров в подпрограммы:

1. По значению (от англ. Value parameter — параметр, передаваемый по значению);

2. По ссылке.

Передача параметров по значению

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

Второй механизм передачи параметров — по ссылке — подразумевает

Частные случаи передачи параметров подпрограммам

Параметры по умолчанию

Особенностью Delphi относительно Pascal является возможность использования параметров по умолчанию. Такие параметры находятся в конце списка параметров и их описания имеют следующий вид:

<Параметр>: <Тип параметра> = <Значение по умолчанию>

o Передача параметров по значению

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

При передаче параметра по значению изменение этого параметра внутри вызываемой процедуры (функции) никак не отразится на ней.

o Передача параметров по ссылке

При передаче же по ссылке изменение параметра внутри процедуры (функции) влечет за собой изменение и самой передваемой переменной.

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