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

168304
знака
7
таблиц
26
изображений

10.2. Стандартные процедуры и функции для работы с файлами

Далее примем обозначения: FV - имя файловой переменной или просто имя файла, str - строковое выражение, Р - имя структурной компоненты файла, n - целое выражение.

Assig и (FV, str); – процедура присвоения имени файла.

Имя файла, которое является значением str, присваивается переменной файлового типа FV. Далее все действия над этой переменной будут эквивалентны действиям над файлом, определенным именем str. Например: Assign (books, 'c:\bibl.dos'); позволяет работать не с именем 'c:\bibl.dos', которое может быть достаточно длинным (если имеются каталоги и подкаталоги), а с именем books.

Rewrite (FV); – процедура создания нового файла с именем FV на диске. Имя файла должно быть предварительно определено процедурой Assign. Если на диске уже был файл с таким именем, то он уничтожается. Указатель файла устанавливается в первую позицию с номером 0. Файл еще не содержит ни одной компоненты, а только подготовлен к загрузке.

Reset (FV); – процедура открытия (разрешение работать с файлом именем FV) уже имеющегося файла. Указатель устанавливается на начало файла, в позицию с номером 0.

Read (FV, Р); – процедура чтения компоненты файла, на которую установлен указатель, ее содержимое помещено в область памяти с именем Р.

Write (FV, Р); – процедура записи информации из области памяти Р в файл FV и компоненту, на которую установлен указатель.

Seek (FV, n); – процедура установки указателей на компоненту с номером n.

Flush (FV); – очищение буфера сектора. Выполнение процедуры приводит к выталкиванию содержимого внутреннего буфера (области памяти) в файл.

Close (FV); – процедура закрытия файла, при этом записывается маркер конца файла. После работы с файлом его необходимо обязательно закрыть.

Erase (FV); – процедура уничтожения файла. Если производится уничтожение открытого файла, его необходимо предварительно закрыть.

Rename (FV, str); – процедура переименования файла. Файлу FV присваивается имя str.

Truncate (FV); – процедура уничтожения всех компонент файла, начиная с места текущего положения указателя и подготовки файла к записи.

Eof (FV) – функция проверки маркера конца файла. Значение функции равно True, если указатель файла находится за последней компонентой, и False – в противном случае.

Filepos (FV) – функция определения положения указателя.

Filesize (FV) – функция определения длины файла. Функция возвращает целочисленное значение, равное количеству компонент файла: если File Size (FV) = 0, то файл пуст.

Loresult (FV) – функция проверки результата последней операции ввода- вывода на наличие ошибок. Если ошибка обнаружена, возвращается код ошибки, если нет, то код = 0.

 

10. 3. Стандартные файлы

 

Con: – консоль (клавиатура или экран дисплея). Турбо-Паскаль устанавливает различия между этими устройствами по направлению передачи данных: чтение данных возможно только с клавиатуры, а запись - только на экран. Ввод с клавиатуры буферизуется: символы по мере нажатия клавиш помещаются в буфер, содержимое которого передается в ЭВМ только после нажатия клавиши ENTER, поскольку вводимые и буферизированные символы отображаются на экране. Con применяется «по умолчанию» для ввода с помощью операторов READ и Readln и для вывода на экран – операторов write и writeln, если не указано имя файла FV.

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

Trm: – терминал, предназначенный для ввода с клавиатуры и вывода на экран без редактирования.

Kbd: – клавиатура, используемая только для ввода с клавиатуры, при вводе информация не отображается на экран.

PRN: – построчно печатающее устройство (принтер), используемое только для вывода.

Aux: – вспомогательное устройство, подключающееся через порты.

Usr: – устройство пользователя, применяемое при написании собственных драйверов для организации нестандартного ввода-вывода.

10.4. Файлы последовательного доступа, созданные пользователем

Работа с файлом последовательного доступа предполагает его создание, обработку и корректировку. Для создания файла последовательного доступа необходимо:

-          объявить файловую переменную;

-          «привязать» файл к физическому носителю информации (присвоить файлу имя). (Assign);

-          открыть новый файл (Rewrite);

-          подготовить информацию для ввода в компоненту файла, т.е. сформировать запись для ввода в файл в качестве компоненты;

-          записать в файл компоненту (Write);

-          повторить п. 4, 5 необходимое количество раз;

-          закрыть созданный файл (Close).

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

-          присвоить файлу имя (Assign);

-          открыть уже существующий файл (Reset);

-          считать текущую компоненту из файла в рабочую область памяти (как правило, типа запись со структурой компоненты), (Read);

-          выполнить обработку информации (например, вывести на экран поля записи);

-          закрыть файл (Close).

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

1. Расширение файла за счет внесения новых компонент.

2. Полная замена содержимого компоненты.

3. Замена каких-либо полей отдельных компонент.

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

Добавление новых записей в файл последовательного доступа выполняется путем записи компонент в конце файла. Маркер конца файла при этом переносится. Естественно, на физическом носителе при этом должно иметься свободное пространство.

Для записи новых компонент в конце имеющегося файла необходимо:

-          присвоить файлу имя (Assign);

-          открыть уже существующий файл (Reset);

-          установить указатель файла за последней компонентой (Seek (FV, File sise (FV)):

-          создать в специально выделенной области памяти (как правило записи) новую компоненту;

-          записать новую компоненту в файл (write);

-          закрыть файл (Close).

Пример. Организовать последовательный файл с именем PRIM bibl.dos в подкаталоге Prim каталога TURBO на диске С, т.е. C:\TURBO\bibl.dos. Компонента должна иметь структуру: индекс книги, порядковый номер экземпляра, фамилию, инициалы первых трех авторов (если их несколько), название книги. Блок создания файла оформить в виде процедуры с именем org. Блок доступа к компонентам файла оформить в виде процедуры с именем obr., а блок корректировки – в виде процедуры с именем Rash.

Program Prim47;

type books=record {базовая запись}

nomer:integer;

avtor:string[16];

nazv:string[30];

index:integer; end;

var bf:file of books; { описать файловую переменную }

rb:books; { участок памяти со структурой }

{ компоненты файла }

 procedure org;

begin assign(bf,'C:\TURBO\PRIM\bibl.dos');

Rewrite(bf);

with rb do { работать с записью rb без уточненных имен }

while True do

begin writeln('ввести номер книги');

 readln(nomer);

 if nomer=9999 then {9999 – признак окончания ввода данных}

Begin close(bf); Exit end;

writeln('ввести имя автора');

readln(avtor);

writeln('ввести название книги');

readln(nazv);

writeln('ввести значение индекса');

readln(index);

write(bf,rb); { записать компоненту из rb в файл }

end; end;

procedure Obr;

Begin Assign(bf,'C:\TURBO\PRIM\bibl.dos');

Reset(bf);

with rb do

while not Eof(bf) do{ выйти из цикла, когда закончится файл }

begin read(bf,rb);

writeln(nomer:5,avtor:16,Nazv:10,index:6); { вывод на экран }

end; Close(bf); end;

procedure Rash;

begin Assign(bf,'C:\TURBO\PRIM\bibl.dos');

Reset(bf);

Seek(bf,Filesize(bf)); { установить указатель на конец файла }

with rb do

 while True do

begin writeln('ввести номер'); readln(nomer);

if nomer=9999 then begin Close(bf);Exit end;

writeln('ввести имя автора'); readln(avtor);

writeln('ввести название книги'); readln(nazv);

writeln('ввести значение индекса'); readln(index);

write(bf,rb); end;end;

BEGIN { основная программа }

Org; Obr; Rash; Obr; readln;

END.

При создании больших программ их части удобно создавать в виде отдельных файлов (объектов), которые затем с помощью директивы компилятора {$i...} можно объединить в одну программу. Это удобно еще и тем, что несколько программистов могут создавать различные программы, что в несколько раз может ускорить процесс их создания.

Создадим ту же программу, что и Prim 47, только пообъектно, тогда процедуру Org запишем в C:\TURBO\Org1.pas, процедуру Obr – в C:\TURBO\Orb1.pas, процедуру Rash – в C:\TURBO\Rash1.pas, а вызывающую (основную программу – в C:\TURBO\Prim. 48, в которой предусмотрим подключение объектов – процедур Org, Obr, Rash к основной программе через директивы компилятора $i.

procedure Org1;

begin

assign(bf,'C:\TURBO\bibl.dos');

Rewrite(bf);

with rb do

while True do

begin writeln('ввести номер книги');

readln(nomer);

if nomer=9999 then

begin close(bf); Exit;

end;

writeln('ввести имя автора');

readln(avtor);

writeln('ввести название книги');

readln(nazv);

writeln('ввести название индекса');

readln(index);

write(bf,rb);

end;

end;

procedure Obr1;

begin

Assign(bf,'C:\TURBO\bibl.dos');

Reset(bf);

with rb do

while not eof(bf) do

Begin read(bf,rb);

writeln(nomer:5,avtor:16,Nazv:10,index:6);

end;

Close(bf);

writeln('нажмите enter'); readln;

end;

procedure Rash1;

begin Assign(bf,'C:\TURBO\bibl.dos');

Reset(bf);

Seek(bf,Filesize(bf));

 with rb do

while True do

begin writeln('введите номер'); readln(nomer);

if nomer=9999 then begin Close(bf);exit end;

writeln('введите имя автора'); readln(avtor);

writeln('введите название книги'); readln(nazv);

writeln('введите значение индекса'); readln(index);

write(bf,rb);

end;end;

Работу построим в режиме меню.

Program Prim48;

label M;

type books=record

nomer:integer;

avtor:string[16];

nazv:string[30];

index:integer; end;

Var bf:file of books;

rb:books; regim:byte;

{$i C:\TURBO\Org1.pas}

{$i C:\TURBO\Obr1.pas}

{$i C:\TURBO\Rash1.pas}

BEGIN

M: writeln('введите режим работы');

writeln('1 – создание, 2 – обработка',

'3 – расширение, 4 – выход');

readln(regim);

case regim of

1:Org1;

2:Obr1;

3:Rash1;

4:Exit; else writeln('неправильно задан режим'); end;

goto M;

END.

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

Program Prim49;

label M1,M2 ;

type books=record

nomer:integer;

avtor:string[16];

nazv:string[30];

index:integer; end;

Var bf:file of books;

rb:books; regim:byte; si:char; fl:string;

{$i C:\TURBO\Org.pas}

{$i C:\TURBO\Obr.pas}

{$i C:\TURBO\Rash.pas}

BEGIN

M1: writeln('где будет храниться файл? диск:\каталог\имя'),

readln(fl);

M2: writeln('введите режим работы');

writeln('1 – создание, 2 – обработка',

'3 – расширение, 4 – выход');

readln(regim);

case regim of

1:Org;

2:Obr;

3:Rash;

4:begin writeln('будем ещё работать с файлами? - "Y"');

writeln('или конец работы – любая клавиша');

readln(si);

if (si='Y')or(si='y') then goto M1 else HALT; end;

else begin writeln('неправильно задан режим');

goto M2; end; end; goto M2;

END.

Procedure Org2;

begin

assign(bf, fl);

Rewrite(bf);

with rb do

while True do

begin writeln('введите номер книги');

readln(nomer);

if nomer=9999 then

begin close(bf); Exit end;

writeln('введите имя автора');

readln(avtor);

writeln('введите название книги');

readln(nazv);

writeln('введите значение индекса');

readln(index);

write(bf,rb);

end; end;

Procedure Obr2;

begin

Assign(bf, fl);

Reset(bf);

with rb do

while not Eof(bf) do

begin read(bf, rb);

writeln(nomer:5,avtor:16,Nazv:10,index:6);

end; Close(bf);

end;

Procedure Rash2;

begin assign(bf, fl);

Reset(bf);

Seek(bf,Filesize(bf));

with rb do

while True do

begin writeln('введите номер'); readln(nomer);

if nomer=9999 then begin Close(bf);Exit end;

writeln('введите имя автора'); readln(avtor);

writeln('введите название книги'); readln(nazv);

writeln('введите значение индекса'); readln(index);

write(bf,rb);

end;end;

 

10.5. Файлы произвольного доступа

Файлы произвольного доступа используются при наличии зависимости значения какого-либо поля компоненты от ее порядкового номера в файле. Порядковый номер компоненты иногда называют ключом компоненты файла.

Организовать файл произвольного доступа можно двумя способами:


Информация о работе «Основы программирования на языке Паскаль»
Раздел: Информатика, программирование
Количество знаков с пробелами: 168304
Количество таблиц: 7
Количество изображений: 26

Похожие работы

Скачать
274963
85
0

... ячейка, а имя переменной превращается в адрес ячейки. Появление этого адреса происходит в результате работы специального оператора языка (NEW), однако его значение в большинстве случаев не используется при программировании на алгоритмических языках типа Паскаль. Условимся считать, что адрес ячейки, которая будет хранить переменную А, есть А. Или, другими словами, А - это общее имя переменной и ...

Скачать
11632
0
1

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

Скачать
47594
1
0

... , тем не менее, использование программ с перекрытиями снимает это ограничение. Два библиотечных модуля TURBO3 и GRAPH3 введены для совместимости с ранней версией 3.0 системы Турбо Паскаль. 2 Объекты Базовым в объектно-ориентированном программировании является понятие объекта. Объект имеет определённые свойства. ...

Скачать
17572
2
0

... выбрать режим Quit <Alt>-<X>, после чего нажать либо <Enter>, либо комбинацию <Alt>-<X>. ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ Функциональные клавиши используются для управления средой Турбо Паскаля. Они обозначаются F1, F2,..., F12 и располагаются в самом верхнем ряду клавиатуры. С каждой из этих клавиш связывается некоторая команда меню. Действие почти всех функциональных ...

0 комментариев


Наверх