
- •function IOResult:Integer;
- •Нетипизированные, или бестиповые файлы
- •Процедуры и функции для работы с бестиповыми файлами
- •Ввод и вывод
- •procedure BlockWrite(F, Buf, N, Result);
- •Пример - копирование бестипового файла.
- •procedure ………….;
- •AssignFile(F1, ‘…’);
- •Динамические структуры данных
- •В ЯП высокого уровня обычно есть возможность выделять и освобождать память для размещения
- •Тип-указатель
- ••Адрес – совокупность двух 16-ти разрядных слов - сегмента и смещения.
- •Объявление типа
- •Операции, изменяющие значения
- •Операции над указателями
- •Стандартные процедуры для работы с динамической памятью
- •procedure Dispose(P);
- •procedure GetMem(P, Size);
- •Указатели и динамические структуры
- •Динамический массив не имеет фиксированного размера.
- •Текущее максимальное значение индекса определяется с помощью функции
- •Связанные динамические структуры данных (ДСД)
- •Связанный список
- •Предпосылки к объявлению типа список
- •Объявление типа список:
- •Операции со списками
- •Частный случай списка:
- •Частный случай списка:очередь - список с двумя точками доступа
- •Процедурный тип
- •Общая структура подпрограммы:
- •Локализация (доступность) объявленных
- •Подпрограммы-функции
- •Заголовок функции
- •Значения, возвращаемые из
- •Подпрограммы-процедуры
- •Заголовок процедуры:
- •Вызов подпрограммы
- •Параметры-значения
- •Параметры-константы
- •Параметры без типа
- •Рекурсивные подпрограммы
- •Процедурный тип
- •Объявление процедурного типа
- •Пример: нахождение таблиц умножения и
- •procedure printtable(operation: fun); var i, j: byte;

function IOResult:Integer;
возвращает - число 0, если последняя операция
ввода/вывода завершилась успешно,
- другое число в противном случае.
При использовании IOResult необходимо установить директиву игнорирования ошибок ввода/вывода (I/O-checking)
{$I-} или в Delphi {$IOChecks off}
а затем вновь ее переключить
{$I+} или в Delphi {$IOChecks on}
1

var
Vf: file of Byte; begin
AssignFile(Vf, 'myfile.txt');
{$I-} Reset(Vf);
if IOResult<>0
then
MessageDlg('Ошибка открытия файла', mtError, [mbOk], 0);
{$I+}
...
end;
2

Нетипизированные, или бестиповые файлы
Бестиповые файлы применяются для
быстрой работы с данными на физическом уровне в соответствии с их внутренним форматом.
Объявление файловой переменной:
var f: file;
3

Процедуры и функции для работы с бестиповыми файлами
procedure Reset(F, Size);
procedure Rewrite(F, Size);
Параметр Size определяет размер пересылаемого элемента информации в байтах
(по умолчанию Size =128)
Универсальное значение Size для физического доступа к любым файлам =1
4

Ввод и вывод
procedure BlockRead(F, Buf, N, Result);
читает из файла N или менее (если достигнут конец файла) компонент и помещает их
в переменную Buf.
Необязательный параметр Result возвращает фактическое количество считанных компонент.
Максимальный размер переносимой информации= N* Size
5

procedure BlockWrite(F, Buf, N, Result);
выводит в файл N или менее (если заполнится диск) компонент из переменной Buf.
Необязательный параметр Result возвращает фактическое количество записанных компонент.
Максимальный размер переносимой информации= N* Size
6

Пример - копирование бестипового файла.
При открытии надо указать размер компоненты в байтах.
Для считывания всего файла его размер должен быть кратен размеру компоненты.
Этому требованию всегда удовлетворяет Size=1
Чтение идет по несколько компонент.
Оптимальный объем информации – 512 байт (объем физ. сектора на диске).
Следовательно, при Size=1, N=512.
7

procedure ………….;
const Size=1;
BufSize=512; var F1, F2: File;
ReadResult, WriteResult: Word; Buf: array[1..BufSize] of char;
…
begin
…
8

AssignFile(F1, ‘…’); |
|
|
Reset(F1, Size); |
|
|
AssignFile(F2, ‘…’); |
|
|
Rewrite(F2, Size); |
|
|
repeat |
|
|
BlockRead(F1, Buf, BufSize, ReadResult); |
||
BlockWrite(F2, Buf, ReadResult, WriteResult); |
||
until (ReadResult=0) or (ReadResult <> WriteResult); |
||
if ReadResult=0 |
|
|
then MessageDlg(‘OK’,mtInformation, [mbOK], 0) |
||
else MessageDlg(‘диск переполнен’, mtError, [mbOK], 0); |
||
CloseFile(F2); |
Для Windows |
|
CloseFile(F1); |
||
приложений |
||
end; |
||
|
||
|
9 |

Динамические структуры данных
Общее свойство рассмотренных типов данных (простых, структурированных) :
под них выделяется оперативная память и устанавливаются внутренние связи на этапе компиляции и компоновки, которые не меняются во время работы программы.
Это - статические данные и структуры данных.
Доступ к статическим переменным осуществляется через их имена.
10