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

Если есть необходимость нарушения последовательной записи или чтения из файла, текущий указатель, может быть изменен процедурой SEEK (МуFilе, n); где n - требуемое положение указателя. Нумерация элементов типизированного файла начинается с нуля.

Seek (МуFilе, 0); - устанавливает указатель в начальной позиции (на первый элемент).

Seek (МуFilе, FileSize(МуFilе)); - устанавливает указатель после последнего элемента, то есть на признак конца файла.

Примечание. Функция FileSize(МуFilе) возвращает количество элементов типизированного файла МуFilе. Текущую позицию указателя дает функция FilePos (МуFilе);

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

Рrogram Writing;

Var FileName : string; {строка, содержащая имя файла}

FVar : file of char; {переменная файлового типа}

Index : integer;

Letter : char; {читаемый из файла символ}

Begin

write('Enter filename: '); {предложение ввести имя файла}

readln (FileName); {ввод имени файла}

assign (FVar,FileName); {связь имени файла и переменной}

{$I-} {отключен контроль ввода/вывода}

reset (FVar); {открытие файла для чтения и записи}

{$I+} {включен контроль ввода/вывода}

if IOResult <> 0 {выход, если файл не открыт}

then begin writeln ('Не открыт файл ', FileName);Halt end;

while not EOF (FVar) do {цикл до конца файла}

begin

read (FVar, Letter); {чтение символа из файла}

Letter:=Upcase(Letter); (преобразование букв)

Seek(FVar,FilePos(FVar)-1); {перемещ.указателя назад на 1 позицию}

write(FVar,Letter); {запись преобразованной буквы}

end; {конец цикла}

close(FVar) {закрыть файл}

End.

 

Функция IOResultпредназначена для поиска ошибок, возникающих при работе с файлами. Эта функция возвращает результат последней операции ввода/вывода, если автоматический контроль за ошибками, возникающими при выполнении операций ввода/вывода, отключен с помощью директивы компилятора {$I-}. При безошибочном выполнении операций ввода/вывода функция IOResultвсегда возвращает результат равный нулю. Поэтому, как правило, ее используют в операции сравнения с нулем. При использовании функции IOResult нужно помнить о том, что она возвращает величину, которую можно интерпретировать как флаг ошибки лишь в том случае, когда эта функция вызывается следом за операцией ввода/вывода. А если Вы хотите провести анализ ошибки позже, Вам придется сохранить возвращаемое значение в некоторой промежуточной переменной.

Рассмотрите примеры решения задач. Наберите тексты программ, проверьте их действие. Обратите внимание на комментарий. Выполните задания к задачам.