- •1. Язык Delphi
- •2. Стандартные типы данных
- •3. Операторы и операции
- •4. Управляющие структуры
- •5. Составные типы
- •6. Файловые типы и ввод-вывод
- •IoResult Возвращает статус ошибки последней выполненной операции ввода/вывода.
- •8. Среда Delphi
- •BorderIcons - Свойство определяющее, какие кнопки должны присутствовать у окна.
- •9. Программирование в Delphi
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 Передача параметров по ссылке
При передаче же по ссылке изменение параметра внутри процедуры (функции) влечет за собой изменение и самой передваемой переменной.