Типизированные файлы. Процедуры работы с типизированными файлами

Автор работы: Пользователь скрыл имя, 16 Января 2015 в 17:09, творческая работа

Краткое описание

К типизированным файлам относятся файлы строго определенного типа. Чаще всего это файлы, состоящие из записей. Они применяются для создания различных баз данных.Типизированный файл - это файл, все компоненты которого одного типа, заданного при объявлении файловой переменной. Компоненты файла хранятся на диске во внутреннем (двоичном) формате и нумеруются с 0.

Вложенные файлы: 1 файл

Творческая программирование готовая4 семестр.doc

— 102.50 Кб (Скачать файл)

Основные данные о работе

Версия шаблона

2.1

ЦДОР

Ачинский филиал

Вид работы

Творческое эссе

Название дисциплины

Программирование

Тема

Типизированные файлы. процедуры работы с типизированными файлами

Фамилия

Кузнецов

Имя

Сергей

Отчество

Сергеевич

№ контракта

1430011400501193


 

 

Основная часть

Глава основной части

Типизированный, или компонентный, файл – это файл с объявленым типом его компонентов, т.е. файл с наборами данных одной и той же структуры. Объявление такого файлового типа имеет вид

 

Type f : File Of <Тип>.

К типизированным файлам относятся файлы строго определенного типа. Чаще всего это файлы, состоящие из записей. Они применяются для создания различных баз данных.Типизированный файл - это файл, все компоненты которого одного типа, заданного при объявлении файловой переменной. Компоненты файла хранятся на диске во внутреннем (двоичном) формате и нумеруются с 0. Если посмотреть такой файл любым текстовым редактором, то можно распознать только символьную информацию, на месте же чисел в файле будут располагаться пробелы или символы псевдографики. Стандартное задание в программе такой файловой переменной осуществляется следующим образом:

type 
FileRec = record 
end;

var F : file of FileRec;

Для работы с типизированными файлами используют специальные процедуры 
и функции. 
1. Процедура Read(Var f; с1, с2, ...,сn) - осуществляет чтение очередных компонентов типизированного файла. Список переменных ввода содержит одну или несколько переменных того же типа, что и компоненты файла, разделенных запятыми. Если файл исчерпан, обращение к процедуре вызывает ошибку ввода-вывода. 
2. Процедура Write(Var f; c1, с2, ...,cn) - осуществляет запись данных в типизированный файл. Список вывода содержит одно или более выражений того же типа, что и компоненты файла, разделенных запятыми. 
3. Процедура Seek(Var f; numcomp:word) - осуществляет установку указателя файла на компонент файла с номером numcomp. 
4. Функция FileSize(Var f):longint - возвращает количество компонент файла, указанного файловой переменной. Может использоваться для установки на конец файла совместно с Seek(): Seek(f, FileSize(f));... 
5. Функция FilePos(Var f):longint - возвращает порядковый номер компонента, 
который будет обрабатываться следующей операцией ввода-вывода.

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

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

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

Удаление компонент обычно требует перезаписи файла.

Работа в режиме последовательного и прямого доступа.

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

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

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

1) Reset (f);

где f – файловая переменная, связанная ранее процедурой Assign с уже существующим файлом или логическим устройством–приемником информации. При выполнении этой процедуры дисковый файл или логическое устройство подготавливается к чтению информации. В результате специальная переменная–указатель, связанная с этим файлом, будет указывать на начало файла, т.е. на компонент с порядковым номером 0;

2) Rewrite (f);

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

Процедура Close (f) закрывает файл. При создании нового или расширении старого файла процедура обеспечивает сохранение в файле всех новых записей и регистрацию файла в каталоге. Функции процедуры Close выполняются автоматически по отношению ко всем открытым файлам при нормальном завершении программы.

Для чтения данных из типизированного файла предназначена процедура

Read (f, <сп. ввода>);

где <сп. ввода> – список ввода, содержащий одну или более переменных такого же типа, что и компоненты файла (того же типа, что и тип в предложении File Of < тип >). Перед первым обращением к процедурам ввода–вывода указатель файла стоит в его начале и указывает на первый компонент с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Если этих переменных в списке несколько, указатель будет смещаться после каждой операции обмена данными.

Для записи данных в типизированный файл используется процедура

Write (f, <сп. ввода>);

Параметры аналогичны параметрам процедуры Read. При записи в типизированные файлы записывается машинное представление очередного компонента, будь то число, массив, запись или строка. Внутри файла компоненты не отделяются ничем друг от друга. Поэтому не имеет смысла применять к типизированным файлам операторы Readln и Writeln. В них просто не существует такого понятия, как строка и ее конец.

Функция Eof (f) возвращает результат типа Boolean: True, если считан последний компонент файла, и False – в противном случае. Файл f должен быть открыт.

Файл – это последовательная структура данных. Естественным способом доступа к компонентам файла является последовательный доступ. После открытия файла он “ждет” чтения или записи первого компонента. После каждого очередного обращения к файлу он готов выдать или принять очередной по счету компонент. Пусть нужно прочитать из файла f пятый элемент и записать его в переменную V соответствующего типа. Это можно сделать, считав “впустую” четыре первых значения:

 

Reset (f); For i := 1 to 5 do Read (f, V); Writeln(V);

 

В V останется последнее, пятое, значение из файла. Это не самое удачное решение проблемы. Существуют встроенные процедуры и функции Турбо Паскаля для прямого доступа к компонентам файла.

Процедура Seek (f , <N компонента>) – устанавливает номер текущего компонента файла f. Назначенный компонент будет считан или записан последующей операцией ввода–вывода. Эта процедура непосредственно реализует прямой доступ в файл.

Функция FilePos (f) возвращает номер текущего компонента. Результат типа Longint.

Функция Filesize (f) возвращает реальное число записей в открытом файле. Результат типа Longint.

Truncate (f) – усекает файл f по текущему положению указателя.

Допустим, мы имеем дело с файлом, в котором записываются переменные типа Word, тогда переменная файлового типа может быть введена двояко – с явным объявлением файлового типа:

Type 
WordFile = file of word; 
Var 
MyFile : WordFile;


или без объявления файлового типа:

Var 
MyFile : file of word;


Приведем примеры переменных файлового типа с другими объявлениями:

Type 
Student = record 
Name, SurName : string; 
YearsOld : byte; 
Sessia : array [1..10] of byte; 
end; 
Var 
VarFile1 : file of char; 
VarFile2 : file of Student; 
VarFile3 : file of string;


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

Работа с файлами заключается в записи и считывании его компонентов. Для того, чтобы определить, какие данные будут участвовать в операции, используется неявно заданная переменная – указатель на текущий элемент файла. При открытии файла процедурами reset, rewrite указатель устанавливается на его начало. Запись и чтение производятся поэлементно, причем в них участвует тот элемент файла, на который "смотрит" указатель. В результате выполнения действия указатель перемещается к следующему элементу.

Пример. Приведем шаблон программы для записи данных в типизированный файл.

Program Writing; 
Var 
FileName : string; {строка, содержащая имя файла} 
FVar : file of byte; {переменная файлового типа} 
Index : byte; 
Begin 
write ('Введите имя файла ');{предложение ввести имя файла} 
readln (FileName);{ввод имени файла} 
assign (FVar, FileName);{связь имени файла и переменной} 
rewrite (FVar);{открытие файла для записи} 
for Index := 0 to 99 do {цикл для расчетов и вывода данных в файл} 
write (FVar,Index);{запись в файл FVar величины Index} 
close (FVar); {закрытие файла} 
End.


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

Рrogram Writing; 
Var 
FileName : string; {строка, содержащая имя файла} 
FVar : file of char; {переменная файлового типа} 
Index : integer; 

Letter : char; {читаемый из файла символ} 
Begin 
write('Enter filename: '); {предложение ввести имя файла} 
readln (FileName); {ввод имени файла} 
assign (FVar,FileName); {связь имени файла и переменной}

{$I-} {отключен контроль ввода/вывода} 
reset (FVar); {открытие файла для чтения и записи}

{$I+} {включен контроль ввода/вывода} 
if IOResult <> 0 {выход, если файл не открыт} 
then

begin 
writeln ('Не открыт файл ', FileName); 
Halt 
end; 
while not EOF (FVar) do {цикл до конца файла} 
begin 
read (FVar, Letter); {чтение символа из файла} 
Letter:=Upcase(Letter); (преобразование букв) 
Seek(FVar,FilePos(FVar)-1); {перемещение указателя назад на 1 позицию} 
write(FVar,Letter); {запись преобразованной буквы} 
end; {конец цикла} 
close(FVar) {закрыть файл} 
End.


 

 

 

Список использованных интернет-ресурсов

№ п/п

Наименование интернет-ресурса

Ссылка на конкретную используемую страницу интернет-ресурса

1

http://www.soft-uprating.ru/seonews/41-component-files.html

http://www.soft-uprating.ru/seonews/41-component-files.html


 

 

 


 



Информация о работе Типизированные файлы. Процедуры работы с типизированными файлами