- •Файлы: понятие, причины использования. Носители для хранения файлов
- •Структура дисковых носителей
- •Именование файлов
- •Понятие файла в Pascal
- •Классификация файлов
- •Механизм работы с файлами
- •Описание файловой переменной
- •Сопоставление файловой переменной файлу на диске
- •Открытие файла
- •Добавление информации в файл.
- •Чтение или запись файла
- •Добавление информации в файл
- •Закрытие файла
- •Чтение и запись текстовых файлов. Добавление информации в текстовый файл
- •Добавление информации в текстовый файл
- •Определение размера текстового файла
- •Задание значений переменных генератором случайных чисел Решение задач по теме «Файлы»
- •Двоичные типизированные файлы
- •8.6.3. Двоичные нетипизированные файлы
- •8.7.2. Изменение текущего элемента
- •Добавление информации в файл
- •Работа с файловой системой
- •Обобщение систематизация. Контрольные вопросы и ответы
8.7.2. Изменение текущего элемента
При открытии файла для чтения или записи, текущим элементом автоматически становится первый элемент. Для двоичных файлов в Turbo Pascal предусмотрена специальная процедура, позволяющая переместить указатель текущего элемента в любое место, то есть перейти сразу к нужному элементу. При этом не надо последовательно считывать все предыдущие элементы с начала файла.
Seek (<файловая переменная>, <номер нового текущего элемента>);
Процедура Seek (англ. Seek – искать) перемещает указатель текущего элемента файла, заданного параметром файловая переменная, в позицию, заданную параметром номер текущего элемента. Нумерация элементов файла ведётся от нуля, то есть первый элемент имеет номер 0.
Приведём пример программы, считывающий первый и последний элементы файла без считывания элементов, расположенных между ними.
Program RandomRead; |
|
Uses Crt; |
|
Var T, Sum: real; F: File of Real; Begin ClrScr; |
|
Assign(F, ‘temps.bin’); |
|
Reset(F); |
|
Seek(F,0); |
{Позиционирование указателя текущего элемента на первый элемент необязательно, т.к. при открытии файле текущим элементом является первый (с номером 0)} |
Read(F,T); |
{Чтение из файла текущего элемента (первого) в переменную T} |
Writeln(‘Первый элемент = ’, T:6,3); |
|
Seek(F,FileSize(F)-1); |
{Позиционирование указателя текущего элемента на последний элемент} |
Read(F,T); |
{Чтение из файла текущего элемента (последнего) в переменную T} |
Writeln(‘Последний элемент = ’, T:6,3); |
|
|
|
Close(F); |
|
ReadKey; End. |
|
Добавление информации в файл
Добавление информации в двоичные файлы
Двоичные файлы поддерживают одновременное чтение и запись элементов, причем, если производится запись элементов за пределы файла, то перед записываемым элементом автоматически добавляется соответствующее количество нулевых элементов.
Пример . Запись в двоичный типизированный файл элемента в произвольную позицию
Program RandomWrite; |
|
Uses Crt; |
|
Var T: real; i: Integer; F: File of Real; Begin ClrScr; |
|
Assign(F, ‘rand.bin’); |
|
ReWrite(F); |
|
Seek(F,9); |
{Позиционирование указателя текущего элемента на десятый} |
T:=20.5 |
|
Write(F,T); |
{Запись значения переменной T в десятый элемент файла, предыдущие 9 заполняются нулями} |
Close(F); |
|
ReadKey; End. |
|
Добавление элементов в двоичные файлы происходит аналогичным образом – открытием файла, изменением текущего элемента, и записью в него информации. Для того, чтобы не удалялась предыдущая информация, файл необходимо открывать процедурой Reset (см. листинг 212).
Листинг 212. Добавление информации в двоичный типизированный файл
Program AddBin;
Uses Crt;
Var t:real;
I:integer;
F:file of real;
Begin
Assign(f, ‘rand.bin’);
{сопоставление файловой переменной файлу rand.bin}
Reset(f);
{открытие файла rand.bin для записи}
Seek(f, 10);
{перемещение указателя текущего элемента на одиннадцатый}
T:=20.5;
Write(f,t);
{запись значения в 11 элемент файла, остальные остаются без изменения}
Close(f);
{закрытие файла}
Readkey;
End.