Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алг яз Лаб 6(I-ИСТ).doc
Скачиваний:
12
Добавлен:
05.11.2018
Размер:
244.74 Кб
Скачать

2.1.4. Операции ввода/вывода

После открытия файла ввод и вывод записей осуществляется с помощью обращения к процедурам:

Read(имя_файловой_переменной, имя_переменной);

и

Write(имя_файловой_переменной, имя_переменной);

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

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

Например:

Read(FI, Kart1); {Чтение текущей записи из файла FI в переменную Kart1}

Write(FR, Kart2); {Вывод содержимого переменной Kart2 в текущую запись файла FR}

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

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

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

EOF(имя_файловой_переменной);

Она возвращает значение true (истина), если при чтении достигнут конец файла (указатель находится за последним компонентом), и значение false (ложь), когда указатель находится на другом компоненте.

Эта функция наиболее часто используется в цикле чтения записей до конца файла.

Например:

{Пока не найден конец файла FI}

While not(EOF(FI)) Do Begin

Read(FI, Karta1); {Читать запись из FI в Karta1}

End;

2.1.5. Дополнительные операции (применяемые только

при работе с типизированными файлами)

Переместить указатель (позиционировать) на запись с определённым номером можно с помощью специальной процедуры:

Seek(имя_файловой_переменной, номер_позиции);

где номер_позиции – константа, переменная или выражение целого типа, содержащее номер позиции, которую необходимо сделать текущей. Номер позиции должен находиться в допустимых пределах (от 0 до n-1, если файл содержит n записей).

Например:

Seek(FI, 0); {Установка указателя файла на нулевую запись файла FI}

Seek(FR, 10); {Установка указателя файла на последнюю запись в файле, состоящем из 10 записей}

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

С процедурой Seek связана и процедура Truncate, позволяющая удалить из файла все записи, начиная с текущей и заканчивая последней, т.е. Truncate позволяет «отсечь конец» открытого файла

Truncate(имя_файловой_переменной);

Например, для того чтобы из файла удалить все записи, начиная с пятой, необходимо сделать текущей шестую запись (она имеет номер 5), а затем обратиться к процедуре Truncate:

{Установка указателя на 6-ю позицию}

Seek(FI, 5);

Truncate(FI); {Удаление всех записей, начиная с текущей}

Целочисленная функция FileSize(имя_файловой_переменной) возвращает число, равное реальному количеству записей в файле (оно на единицу больше номера последней записи).

Например:

WriteLn('Файл содержит ', FileSize(FI):4, ' записей.');

При добавлении новой записи в конец файла необходимо установить указатель за последний компонент (на маркер «конец файла») следующим образом:

Seek(FI, FileSize(FI));

Вызов процедуры Seek(FI, FileSize(FI)-1); позволяет осуществить доступ к последней записи файла.

Функция целого типа FilePos(имя_файловой_переменной) возвращает номер текущей записи файла в диапазоне от нуля до n-1, где n – количество компонентов, записанных в файле. Номер реальной записи всегда на единицу больше значения, возвращаемого FilePos, и лишь когда текущей записью является маркер «конец файла», эта функция возвращает число, равное реальному количеству компонентов в файле (то же, что и FileSize).

Например:

WriteLn('Номер текущей записи:', FilePos(FI)+1);

If FilePos(FI)=FileSize(FI) then

WriteLn('Обнаружен конец файла');