Работа с типизированными файлами




Модули

Структура модуля

unit <идентификатор>;

interface

uses <список модулей>; { Необязательный }

{ глобальные описания }

implementation

uses <список_модулей>; { Необязательный }

{ локальные описания }

{ реализация процедур и функций }

begin

{ код инициализации }

end.

Пример готового модуля

unit IntLib;

interface

procedure ISwap(var I,J: integer);

function IMax(I,J: integer): integer;

implementation

procedure ISwap;

var

Temp: integer;

begin

Temp:= I; I:= J; J:= Temp

end; { конец процедуры ISwap }

function IMax;

begin

if I > J

then IMax:= I

else IMax:= J

end; { конец функции IMax }

end. { конец модуля IntLib }

Теория

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

Используется для:

ñ Разбития сложной программы на несколько простых самостоятельных частей(как следствие — простое обновление готовой программы)

ñ Повторное использование функционала в разных программах

ñ Распространение скомпилированных модулей — отличная идея, если вы хотите поделится своими наработками, но не хотите показывать свой исходный код

Заголовок

Заголовок начинается зарезервированным словом unit и следующего за ним имени модуля.

Имя модуля должно совпадать с именем файла модуля. Например

 

Unit primer1;

файл primer1.tpu

 

Интерфейсная часть

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

Пример

 

Unit complexn;
Interface Type Complex= record
Re, im: real;
End;
Procedure AddC(x,y: complex, var z: complex);
Procedure MulC (x,y: complex, var z: complex);

 

Теперь если в программе написать

 

uses complexn;

То в ней будут доступы тип Complex, процедуры AddC, MulC

 

В интерфейсной части модулей паскаля нельзя использовать опережающее описание.

 

Исполняемая часть

Исполняемая часть начинается с ключевого слова implementation и содержит описание подпрограмм, объявленных в интерфейсной части.

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

Implementation
Procedure AddC;
z.re:= x.re + y.re;
z.im:= x.im + y.im;
end;

 

Инициируемая часть

Завершает модуль. Необязательна, begin-end этой части могут быть опущены.
Операторы в инициируемой части выполняются до передачи управления основной программе.
Это означает, что операторы в инициируемой части модуля будут выполнятся до основной программы, если мы подключили этот модуль.

Множества

Множество — это структурированный тип данных, представляющий собой набор взаимосвязанных по какому-либо признаку или группе признаков объектов, которые можно рассматривать как единое целое. Каждый объект в множестве называется элементом множества.

Нельзя использовать стандартные процедуры ввода-вывода для множественных переменных.

Объявление множеств

Пример:

 

Var A, D: Set Of Byte;

B: Set Of 'a'..'z';

C: Set Of Boolean;

D: Set Of 'a','b','c';

Операции над множествами

ñ Объединение

ñ Пересечение

ñ Разность

ñ Вхождение

Объединение обозначается знаком +
Как это работает: [1, 2, 3, 4] + [3, 4, 5, 6] => [1, 2, 3, 4, 5, 6]

Пересечение обозначается символом *

Разность обозначается символом -

Операция вхождения обозначается in
Возвращает истину, если значение(первый операнд) входит во множество (второй операнд)
g in ['a'..'z'] – true
4 in [6..10] – false

 

 

Инициализация переменных

Всем переменным при объявлении по умолчанию присваивается нулевое значение.

Pascal позволяет задавать значение переменной уже при её объявлении.

Конструкция выглядит так

Имя_переменной: тип = значение;

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

Пример

 

const

N = 130;

temp: integer = 20;

Объявили переменную temp типа integer и инициализировали её значением 20.

 

Работа с файлами

Файловый тип переменной

Синтаксис:

ñ Типизированные файлы - <имя>: FILE OF <тип>

ñ Нетипизированные файлы - <имя>: FILE

ñ Текстовые файлы - <имя>: TEXT

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

Assign

Assign(f, FileName)

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

Reset

Reset(f)

открывает файл на чтение

Close

Close(f)

Сбрасывает буфер и закрывает файл

EOF

EOF(f): boolean

истина — достигнут конец файла

Rename

Rename(f, NewName)

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

 

Erase

Erase(f)

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

IOResult

Без аргументов

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

 

Работа с типизированными файлами

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

Запись в файл:

Write(f, список переменных);

Процедура записывает в файл f всю информацию из списка переменных.

Чтение из файла:

Read(f, список переменных);

Процедура читает из файла f компоненты в указанные переменные. Тип файловых компонент и переменных должны совпадать. Если будет сделана попытка чтения несуществующих компонент, то произойдет ошибочное завершение программы. Необходимо либо точно рассчитывать количество компонент, либо перед каждым чтением данных делать проверку их существования (функция eof, см. выше)

Смещение указателя файла:

Seek(f, n);

Процедура смещает указатель файла f на n-ную позицию. Нумерация в файле начинается с 0.

Определение количества компонент:

FileSize(f): longint;

Функция возвращает количество компонент в файле f.

Определение позиции указателя:

FilePos(f): longint;

Функция возвращает порядковый номер текущего компонента файла f.

Отсечение последних компонент файла:

Truncate(f);

Процедура отсекает конец файла, начиная с текущей позиции включительно.



Поделиться:




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

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


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