Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Файлы и работа с ними



Для удобства описания действий над файлами введём понятие «окно файла» или просто «окно». Окно представляет позицию доступа, т.е. ту позицию файла, которая доступна для чтения в режиме чтения, либо для записи в режиме записи. Позиция файла, следующая за последней компонентой файла (или первая позиция пустого файла), помечается специальным маркером. Благодаря этому маркеру определяется конец файла.

Оператор RESET(F) или REWRITE(F) устанавливает файл с именем F в начальное состояние режима записи или чтения, в результате чего окно устанавливается на первую позицию файла.

После выполнения процедуры REWRITE(F) файл с именем F переходит в режим записи. Результат выполнения выглядит следующим образом:

 
 
 
F

       
 
   
 


окно

Оператор WRITE(F, X) записывает в файл (в ту позицию, на которую указывает окно) очередную компоненту, содержащуюся в переменной X, после чего окно сдвигается на следующую позицию. Естественно тип переменной X должен совпадать с типом компонента файла F. Результат выполнения выглядит следующим образом:

X:=f1;

 
 
f1
F

       
 
   
 


окно

X:=f2;

 
f2
f1
F

       
 
   
 


окно

и так далее.

Запись в файл с помощью процедуры WRITE(F, X) можно производить только после выполнения процедуры REWRITE(F).

После выполнения процедуры RESET(F) файл с именем F переходит в режим чтения. Результат выполнения выглядит следующим образом:

f3
f2
f1
F …………

       
 
   
 


окно


Оператор READ(F, X) читает из файла в переменную X (из той позиции, на которую указывает окно) очередную компоненту, после чего окно сдвигается на следующую позицию. Естественно тип переменной X должен совпадать с типом компонента файла F. Результат выполнения выглядит следующим образом:

f2
f1
f1
F …………

       
 
   
 


Окно

X=f1;

f3
f2
f1
F

       
 
   
 


окно

X=f2;

и так далее.

Чтение из файла с помощью процедуры READ(F, X) можно производить только после выполнения процедуры RESET(F).

При чтении из файла нужно определять, указывает ли окно на какую-то компоненту файла или указывает на маркер конца файла. Для определения этого факта в паскале введена в употребление стандартная логическая функция с именем EOF (от end of file), обращение к которой имеет вид eof(F).

Значение этой функции равно TRUE, если окно указывает на маркер конца файла с именем F, и значению FALSE в противном случае.

Недопустимо использовать процедуру READ(F, X) если eof(F)=TRUE.

Например:

Var: data:file of integer; {задаём файловую переменную data содержащую целые}

x:integer; {числа типа integer }

begin

assign(data, ’ c:\tp\user.me ’); {связываем файловую переменную с существующим }

reset(data); {файлом или с файлом который будет создан }

while not eof(data) {если не уверены что файл содержит данные сначала проверяем}

begin {а потом читаем }

read(data,x); {читаем все данные из файла до конца }

…………..

…………..

end;

close(data);

end.

или

Например:

Var: data:file of integer; {задаём файловую переменную data содержащую целые}

x:integer; {числа типа integer }

begin

assign(data, ’ c:\tp\user.me ’); {связываем файловую переменную с существующим }

reset(data); {файлом или с файлом который будет создан }

repeat

read(data,x); {читаем все данные из файла до конца }

…………..

…………..

until eof(data); {если уверены что файл содержит хоть одну компоненту, можно}

close(data); {сначала прочитать её в переменную X а потом проверить }

end.

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

Предположим, что файл F установлен в режим чтения. Тогда буферной переменной будем называть конструкцию F^, т.е. к имени файловой переменной справа приписывается символ ^. Эту переменную не надо описывать в разделе описания переменных, она определяется автоматически с введением в употребление файловой переменной. Тип буферной переменной совпадает с типом компоненты файла. Со значением этой буферной переменной можно выполнять любые действия, которые можно выполнять с любыми переменными.

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

f3
f2
f1
F

       
 
   
 


окно

F^ = f1;

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

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

 
 
f1
F до выполнения процедуры GET(F)

       
 
   
 


окно

F^:=f2; {присваиваем значение буферной переменной}

Get(F);

 
f2
f1
F после выполнения процедуры GET(F)

       
 
   
 


окно





Дата публикования: 2015-02-22; Прочитано: 365 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.022 с)...