Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

1.2.5.2. Особенности открытия типизированных




1. 2. 5. 2. Особенности открытия типизированных

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

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

Для нетипизированных файлов в описание процедуры открытия добавляется параметр < длина записи> типа Word, который устанавливает длину записи для функций обмена с файлом. В этом случае процедуры открытия имеют вид

              Reset ( f, < длина записи> )

             Rewrite ( f, < длина записи> ).

 

1. 2. 6. Запись информации в файл

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

             Write ( f, < список вывода> ),

где f - имя файловой переменной,

< список вывода> - список имен переменных.

 

1. 2. 6. 1. Особенности записи в текстовые файлы

Кроме процедуры Write для текстовых файлов имеется ее модификация - процедура Writeln:

           Writeln ( f [, < список вывода> ] ), где f - имя файловой переменной типа text.

Эта процедура осуществляет те же действия, что и Write, но после операции записи производит переход к следующей строке текстового файла. Процедура в виде Writeln (f) выводит в файл f пару символов: «возврат каретки» и «перевод строки».

 

1. 2. 6. 2. Особенности записи в нетипизированные файлы

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

          BlockWrite ( f, < буфер>, k [, r] ),

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

< буфер> - переменная-буфер (этот параметр передается как нетипизированный);

k - число записей, записываемых за один вызов (имеет тип Word);

r - параметр типа Word, в который помещается число фактически выведенных записей.

Содержимое переменной-буфера целиком помещается в файл f, начиная с текущей записи.

Если при записи в файл процедурой BlockWrite на диске не окажется свободного пространства, то произойдет следующее: если параметр r в вызове процедуры BlockWrite не задан, то возникнет ошибка ввода-вывода; если параметр r задан, то ошибка не будет зафиксирована, а после выполнения процедуры его значение не будет совпадать со значением параметра k.

 

1. 2. 7. Чтение информации из файла

Для чтения данных из файла в программу служит процедура Read, синтаксис которой:

              Read ( f, < список ввода> ),

где f - имя файловой переменной.

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

 

1. 2. 7. 1. Особенности чтения текстовых файлов

Для текстовых файлов имеется модификация процедуры Read - процедура Readln:

            Readln( f [, < список ввода> ] ),

где f - имя файловой переменной типа text.

Эта процедура осуществляет те же действия, что и Read, но после операции чтения производит переход к следующей строке текстового файла.

Процедура в виде Readln(f) вводит и игнорирует последовательности символов до «возврата каретки» и «перевода строки» включительно.

 

1. 2. 7. 2. Особенности чтения нетипизированных файлов

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

          BlockRead ( f, < буфер>, k [, r] ),

где f - имя нетипизированного файла, из которого производится чтение;

< буфер> - переменая-буфер (этот параметр передается как нетипизированный);

k - число записей, читаемых за один вызов процедуры (имеет тип Word);

r - параметр типа Word, в который помещается число фактически считанных записей.

Если при чтении из файла процедурой BlockRead размер буфера окажется меньше произведения < длина записи> *k, где k - число читаемых записей, то произойдет следующее: если параметр r в BlockRead не задан, то возникнет ошибка ввода-вывода; если параметр r задан, то ошибка не будет зафиксирована, а после выполнения процедуры значение параметра r не будет совпадать со значением параметра k.

 

 

1. 2. 8. Дополнительные операции

 

1. 2. 8. 1. Позиционирование, усечение, анализ состояния

для типизированных и нетипизированных файлов

Как было сказано, файлы в Delphi допускают только последовательный доступ. В данном случае возможно только косвенно управлять последовательностью чтения или записи. Имеется в виду возможность позиционировать внутри файла указатель на необходимую запись. В случае типизированных файлов запись в файле - это компонент файла, а в случае нетипизированных - блок, равный по размеру буферу файла.

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

          Seek(f, < номер записи> ), Truncate(f)

и три дополнительные функции

           FileSize(f), FilePos(f), EoF(f),

где f - имя файловой переменной типа, отличного от text;

< номер записи> - целое (типа longint), значение которого понимается как порядковый номер элемента файла, на который необходимо установить указатель.

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

Функция FileSize возвращает общее число элементов файла, а функция FilePos - номер элемента, на который установлен текущий указатель.

Функция EoF возвращает логическое значение true или false в зависимости от того, достигнут ли конец файла.

Процедура Truncate используется для отсечения от файла его хвостовой части, начинающейся от текущей позиции указателя включительно.

Процедуры Seek, FileSize, FilePos и Truncate не могут быть применимы к текстовым файлам ввиду произвольных длин строк таких файлов.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...