Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GOS / Дисциплины программистского цикла.doc
Скачиваний:
53
Добавлен:
09.05.2015
Размер:
1.51 Mб
Скачать

Нетипизированные файлы

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

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

Procedure BlockWrite(Var F: File; Var Buf; Count: Word; [Var Result: Word]);

пишет в открытый файл F Count блоков из переменной Buf

Procedure BlockRead(Var F: File; Var Buf; Count: Word; [Var Result: Word]);

читает в переменную Buf из открытого файла F Count блоков

Переменная в данном случае может быть любого размера, типа и месторасположения, однако ее размер должен быть не меньше, чем <размер>*<размер_блока>, который был указан при открытии - процедуры не проверяют реальный размер переменных, а обрабатывают непрерывный участок памяти, начиная с указанной переменной. Необязательный последний параметр возвращает количество реально записанных или считанных записей. Желательно, чтобы размер записи, указанный при открытии файла, был кратен размеру блока, физически читаемого с диска или размеру блока буфера MS-DOS. Позиционирование производится посредством Seek по блокам точно так же, как и для типизированных файлов.

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

Простой пример работы с файлом:

Var

f:file of char;

c:char;

begin

assign( f, ‘file.dat’); {установливаем связь с именем файла}

reset( f ); {открываем файл для чтения}

seek( f, 1 ); {устанавливаем позицию файле на первую запись}

read( f, c ); {читаем с из текущей позиции значение в переменную}

close( f ); {закрываем файл}

end.

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

Текстовые фалы

Текстовые файлы состоят из строк (разной длины), разделенных парами символов возврат каретки - перевод строки (#13#10). Это обстоятельство (различие в длине строк) приводит к тому, что для текстовых файлов не могут быть применены операции позиционирования (во всяком случае быстро). Это обстоятельство делает процесс разработки алгоримов обработки текстовых файлов довольно сложной (и, как следствие, интересной) задачей программирования.

Процедуры Write и Read работают с текстовыми файлами точно так же, как с текстовым экраном (без учета модуля CRT, то есть без окон, цветов, etc.), то есть не завершают строку и не переходят к чтению новой строки соответственно. Для того, чтобы производить эти действия, используют процедуры WriteLN и ReadLN. Эти же процедуры без второго параметра (переменной типа строка) завершают текущую строку (дописывают #13#10) и переходят к чтению новой строки соответственно.