Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
freePascal 2.0_0.doc
Скачиваний:
13
Добавлен:
01.05.2025
Размер:
343.55 Кб
Скачать

Прямой доступ

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

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

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

filepos(var f): longint

Функция возвращает текущую позицию в файле f. Для только что открытого файла текущей позицией будет 0. После чтения или записи первого блока текущая позиция станет равной 1.

filesize(var f): longint

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

seek(var f; n: longint)

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

truncate(var f)

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

Задача.

Дан текстовый файл. Найти в нем заданную последовательность символов, и заменить их другой последовательностью.

var

stout, stin, str: string;

f: text;

i, len: integer;

begin

assign(f,1.txt');

reset(f);

writeln('Что удалить?');

readln(stout);

writeln('Что вставить? ');

readln(stin);

len:= length(stout);

while not Eof(f) do

begin

readln(f,str);

i := 1;

while i<>0 do

begin

i:= pos(stout,str);

if i<>0 then

begin

delete(str,i,len);

insert(stin,str,i);

end;

end;

writeln(str);

end;

close(f);

readln

end.

Задача.

Создать типизированный файл и записать туда n вещественных чисел.

var f: file of real;

i, n: integer;

a: real;

begin

Assign( f , ’OurFile’ );

rewrite (f);

writeln(’Введите N’);

readln(n);

for i :=1 to n do

begin

write(’a=’ );

readln(a);

write(f,a);

end;

Close(f);

end.

Задания для самостоятельной работы.

  1. Дан текстовый файл. Вывести на экран его содержимое.

  2. Создать типизированный файл. Заполнять его числами до тех пор, пока не будет введена цифра 5.

  3. Дан текстовый файл. Осуществить копирование данного файла в другой текстовый файл. (Пользователь должен иметь возможность самостоятельно вводить имя нового файла).

  4. Создать 3 файла: типизированные (тип real, integer) и текстовый. Заполнить их одинаковыми значениями. Сделать вывод о весе созданных файлов.

  5. Дан типизированный файл (integer). Увеличить все его содержимое на самое часто встречающееся, в данном файле, число.

  6. Дан текстовый файл. Посчитать в нем количество букв, слов, предложений.

  7. Осуществить копирование не типизированного файла.

Записи

В большинстве случаев при написании программ применяются простые типы данных (числа, строки). Но часто возникает необходимость в объединении разных типов данных в один. В Free Pascal для этого применяется структурный тип данных - запись.

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

type

имя записи = record

поле 1 : тип;

поле 2 : тип;

. . .

поле N : тип;

end;

Элементами записей могут быть как простые, так и структурные типы. Никаких ограничений по уровню вложенности структур нет.

Рассмотрим пример: Создадим запись Person, которая будет содержать следующие поля: ФИО, дата рождения, адрес. В свою очередь адрес также сделаем записью, состоящей из полей: город, улица, дом.

type

adr = record

city , street : string;

house : integer;

end;

person = record

FIO, birth : string ;

address : adr;

end;

В программе переменная типа записи объявляется следующим образом:

var переменная : имя записи;

К каждому из компонентов записи можно получить доступ, используя составное имя. Для этого вначале пишется имя переменой, затем точка, затем имя поля.

Создадим переменную типа Person и заполним ее значениями.

var pr1:person;

people:array[1..100] of person;

begin

pr1.FIO:=’Иванов’;

pr1.birth:=’1 января 1980 года’;

pr1.address.city:=’Шадринск’;

pr1.address.street:=’Свердлова’;

pr1.address.house:=1;

people[1].FIO:=’Сидоров’;

people[1].address.city:=’Екатеринбург’;

people[2].FIO:=’Петров’;

people[2].address.city:=’Челябинск’;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]