Модули, записи и файлы
Рефераты >> Программирование и компьютеры >> Модули, записи и файлы

Важнейшим моментом при использовании переменных файловых ти­пов является интерпретация файла как потенциально бесконечного спи­ска значений одного и того же (базового) типа. Например, описание пе­ременной F вида

var

F : file of integer;

понимается как определение в программе под именем F списка неопреде­ленного количества целых чисел, расположенного на некотором внешнем запоминающем устройстве (например, на магнитном диске).

С каждой переменной файлового типа также связано понятие теку­щего указателя файла. Текущий указатель можно понимать как скрытую переменную (то есть переменную, неявно описанную вместе с файловой

переменной), которая обозначает ("указывает" на) некоторый конкретный элемент файла. Таким образом, можно графически так представить ин­терпретацию файла, связанного с переменной F: 0 1 2 N

Целое

Целое

Целое

. . . . .

Целое

. . .

Текущий указатель —————

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

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

Нужно также отметить, что все операции с файлами в языке Turbo Pascal реализованы с использованием базовых средств операционной сис­темы; в частности, понятие текущего указателя файла поддержано в MS-DOS. Однако все перемещения по файлу (как явное управление указателем, так и сдвиги при обменах) выполняются в терминах байтов. Таким образом, все аспекты, связанные с типизацией содержимого фай­лов, представляют собой системную надстройку языка Turbo Pascal.

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

Обычные типизированные файлы открываются с помощью одной из двух системных процедур - Reset или Rewrite, единственным параметром

которых в данном случае является файловая переменная. Обе эти проце­дуры открывают файл для обмена. Разница между ними заключается в начальных действиях с файлом.

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

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

Процедура close завершает действия с файлом, который указывается в качестве ее единственного параметра. При этом буфер, образованный при открытии файла, ликвидируется. После этого файловую переменную можно связать посредством процедуры Assign с каким-либо другим дис­ковым файлом. Заметим, что при окончании работы всей программы происходит автоматическое закрытие всех файлов, открытых в программе. Однако хорошим правилом является явное закрытие файлов процедурой close после окончания работы с ними.

Помимо закрывающей процедуры close, в системе Turbo Pascal также имеется дополнительная процедура Flush (ее параметр - файловая пере­менная). Flush используется для завершения обменов с файлом без его закрытия. Обмены с файлами всегда реализуются через некоторый буфер в оперативной памяти, поэтому в процессе записи на файл последние записываемые элементы могут еще находиться ("застрять") в буфере. Процедура Flush вызывает принудительный сброс этих элементов в файл. Эта процедура имеет смысл в том случае, если с файлом проводились операции записи, и используется редко, так как процедура close произ­водит такие же действия.

Глава 8. Задание по второй части курсовой работы

В файле содержаться справочные сведенья о предприятиях-задолжниках по уплате налогов

ИНН

Наименование предприятия

Средство на начало года

Начислено налогов в отчет. период

Уплачено налогов в отч. Период

…… .

…………

………………

…………….

………………

…………

…… .

…………

………………

…………….

………………

…………

Сведенья на конец отчетного периода

…………………

……………….

……………

………………

………….

…………………

……………….

…………….

……………

………….


Страница: