Не типизированные файлы и операции над ними

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

Определение

f: file; - объявление ф.п.

Reset(<ф.п.>, <размер буфера>);

Rewrite(<ф.п.>, <размер буфера>); - используя эти процедуры, можно явно указать размер буфера ввода/вывода, который указывается вторым параметром.

Если 2 параметр не указан, то по умолчанию размер буфера 128 байт. Размер буфера показывает какое количество байт будет считываться из файла или записываться в файл за одно обращение. Минимальный размер буфера 1 байт, а максимальный 64 кб. Т.к. чтение и запись в не типизированные файлы производится блоками, то вместо процедур write и read используются процедуры

Для чтения BlockRead(<>, <>, <N>, [,<NN>]);

Для записи BlockWrite (<>, <>, <N>, [,<NN>]);

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

Параметр <N> определяет количество записей, которое должно быть прочитано или записано за 1 обращение к диску. Если N=1 то за 1 обращение будет считана и записана 1 ёмкость буфера. Если N>1, то запишется N ёмкостей буфера.

N<1 – не имеет смысла!

При установке значения N необходимо учитывать, чтобы выполнялось условие N* размер буфера было меньше 64 кб.

параметр NN возвращает количество фактически обработанных(записанных или считанных с записи) ёмкостей буфера. Если после завершения работы с файлом NN =N, то можно считать, что работа прошла успешно. В противном случае будет содержать количество успешно записанных емкостей буфера. Неудача посередине блока равносильна отмене его чтения или записи. При использование процедур blockread и blockwrite буферная переменная (без типовая) определяет адрес памяти начиная с которого заданная параметром N и буфером количество байт будет писаться в файл или читаться из него.

Пример записи и чтения в файла.

***

const

a:array[1..5] of byte=(1,2,3,4,5);

var

b:array[1..5] of byte;

f:file;

NN:word;

begin

Assign(f, ‘a.dat’);

rewrite(f,5);

Blockwrite(f, <>, 1, NN);

close(f);

reset (f,5);

Blockread(f, <>, 1,NN);

close(f);

***

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

Пример считывания статических данных.

Var

A,b,c:array[1..10] of byte;

.

.

Begin

.

.

Rewrite(f,sizeof(a));

Blockwrite(f,a,3);

Close(F);

.

.

RESET(f,sizeof(a));

Blockread(f,a,3);

Close(f);

Запись и чтение динамического массива.

Type

Mas=array[1..10] of byte;

Var

P:^mas;

F:file;

I:byte;

Begin

New(p);

For i:=1 to 10 do

P^[i]:=I;

Assign(f,’a’);

Rewrite(f,sizeof(mas));

Blockwrite(f,p^,1);

Close(f);

Использование не типизированного файла для хранения образа текстового экрана.

Type

V=record;

Inf:char;

Attr:byte;

End;

Mas_v=array[1..200] of v;

Var

F:file;

Ptr_V:^MAS_v;

.

.

Ptr_v:=ptr($b800,$0);

Assign(f,’a’);

Rewrite(f,sizeof(mas_v));

Blockwrite(f,ptr_v^,1);

Close(f);

Модульность программ

ЛЕКЦИЯ №16

Модульность программ. Структура модуля. Библиотечные и программные данные. Компиляция модулей. Правила подключения модулей, загрузка в память, перекрытие библиотечных данных. Закольцованность модулей.

Под модульностью понимают принцип построение программ из отдельных программных единиц - модулей.

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

Модули используют в следующих случаях:

1. Для создание (построение) программ код, которых превышает 64 кб., таким образом модульность позволяет создавать программы практически любого размера. Сам код модуля не может превышать 64 кб. Поскольку модули при подключении к программе загружаются в ОЗУ, то количество подгружаемых модулей ограничивается объемом ОЗУ. (при условии если не используется оверлейная структура организации модулей)

2. Для построения собственных библиотек процедур и функций, которые можно подключать к различным программам. Это использование модулей аналогично использованию стандартных библиотек Паскаля таких как Crt, Graph, Dos, overlay.(они организованны как модули)

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

Структура модуля отображает правило построения модуля ю

Модуль разделен на 4 части:

1. Unit

«имя модуля» - заголовок модуля

2. Interface

«Интерфейсная часть» - раздел объявлений

3. Implementation

«исполняемая часть» - раздел реализации

4. [Begin

«инициирующая часть»]

End; Раздел инициализации

1. Заголовок модуля. Заголовок определяет имя модуля, по которому модуль будет подключаться к программе. Имя модуля, стоящее после ключевого слова Unit должно совпадать с именем файла, в который помещается исходный текст модуля (совпадать может только 8 символов имении, так как файл определяется 8-ю символами).Если текст модуля находится в файле Modul_1.Pas, то заголовок будет unit modul_1;

2. Раздел объявлений. Этот раздел модуля начинается с ключевого слова Interface. в этом разделе описываются типы, константы, переменные, которые будут доступны основной программе, в которой этот модуль будет подключаться и другим модулям, которые подключают исходный.

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

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

Unit Modul_1;

Interface

Uses modul_2;

Type

«библиотечные типы»

Const

«библиотечные константы»


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow