Прямой доступ к нетекстовым файлам ТР 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Прямой доступ к нетекстовым файлам ТР



 

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

Следующие подпрограммы позволяют организовывать прямой доступ к записям типизованных и нетипизованных файлов. Всюду ниже f - файловая переменная.

1. Функция FilePos(var f):longint возвращает номер позиции указателя файла. После открытия файла эта функция возвращает 0.

2. Функция FileSize(var f):longint возвращает количество записей файла.

3. Процедура Seek(var f;n:longint) перемещает указатель файла f в позицию с номером n. Обращение Seek(f; FileSize(f)) установит указатель в конец файла.

4. Процедура Truncate(f) усекает файл по текущей позиции указателя. Для удаления последней записи файла выполним последовательность операторов Seek(f;FileSize(f) -1); Truncate(f).

 

В ТР существует предопределенная переменная FileMode, которая определяет режим для открываемых файлов. По умолчанию FileMode=2, что соответствует режиму чтения и записи, FileMode=1 - только запись, FileMode=0 - только чтение.

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

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

Program del_even;

Var f:file of integer;

i,j:longint; {i - указатель для чтения, j - указатель для записи}

n:integer;

f_name:string[40];

Begin

write('Введите имя файла '); readln(f_name);

Assign(f,f_name); Reset(f);

i:=0; j:=0;

while not Eof(f) do

begin read(f,n); i:=i+1;

if odd(n) then

begin Seek(f,j);

j:=j+1;

write(f,n) {Записываем нечетное.}

end;

Seek(f,i)

end;

Seek(f,j);

Truncate(f);

Close(f)

end.

26. ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ

 

Переменные, структура и тип которых определяются в разделе описаний блока (программы или подпрограммы), существуют и не изменяют своей структуры в течение всего времени работы блока. Такие переменные и связанные с ними структуры называются статическими.

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

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

 

Ссылочный тип данных

 

В Паскале есть возможность создания динамических переменных с помощью переменных ссылочного типа.

Описание ссылочного типа:

 
 

 


Значением типа указатель является адрес переменной базового типа. Тип указатель занимает 4 байта (сегмент и смещение).

Пример 1. Описание переменных ссылочных типов.

Type t_ptr_real=^real;

t_vect=array[1..100] of char;

Var p1, p2:t_ptr_real; {указатель на вещественное число}

p_vect:^t_vect; {указатель на символьный массив}

Описанные переменные-указатели являются статическими, каждая из них занимает 4 байта. При описании переменные не инициализируются, поэтому их значения считаются неопределенными.

В ТР предопределен ссылочный тип pointer - нетипизованный указатель. Его значением является адрес ячейки памяти.

Начиная с версии ТР7, в ТР реализован тип Pchar = ^Char.

Инициализация переменной ссылочного типа может быть выполнена с помощью оператора присваивания или с помощью подпрограмм выделения памяти.

Ссылочные типы совместимы по присваиванию, если их базовые типы тождественны или один из них является нетипизованным указателем. Существует предопределенная константа nil: pointer (пустой указатель). После присваивания р:=nil указатель p не ссылается ни на какую область памяти. Если переменная р1 уже инициализирована и р1¹ nil, то после присваивания р2:=р1 обе переменные ссылаются на одну и ту же область памяти.

Тип Pchar, кроме того, совместим по присваиванию с символьным массивом и строковым типом.

 



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 121; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 23.20.51.162 (0.005 с.)