Средства обработки файлов
Каждому файлу в языке ставится в соответствие файловая переменная, которая должна быть связана с конкретным внешним файлом. Поэтому перед началом работы с файлом необходимо установить данное соответствие. Для этого в языке используется процедура: Assign(Var F; Name:String); где F- переменная любого файлового типа, а строковое выражение Name содержит полное имя файла, удовлетворяющее требованиям операционной системы. Процедура Assign всегда предшествует другим процедурам работы с файлами, так как ставит в соответствие конкретному файлу на внешнем устройстве логическую файловую переменную языка, к которой впоследствии будут обращаться все другие файловые процедуры. Недопустимо использование процедуры Assign для уже открытого файла. Это значит, что если было назначено имя конкретного набора данных файловой переменной с помощью процедуры Assign, а затем этот файл был открыт, то, прежде чем использовать ту же файловую переменную для нового набора данных, необходимо с помощью процедуры Close закрыть этот файл. Для работы с файлом прежде всего необходимо его открыть. В языке Паскаль предусмотрены для этого две процедуры: Reset(var F : file ); - открывает существующий файл; Rewrite(var F : file ); -создает и открывает новый файл. При описании обеих процедур параметр file означает файловую переменную любого типа. Открытие внешнего файла с помощью процедуры Reset в случае его отсутствия на диске может привести к ошибке при выполнении программы. Пример1. Стандартное открытие файла Assign(F, ' ') ; Reset(F) ; Процедура Rewrite создает и открывает новый файл. Использование этой процедуры требует особого внимания. При попытке создать и открыть новый файл с именем уже существующего на диске набора данных действие процедуры Rewrite сведется к удалению этого набора и созданию нового пустого файла с тем же именем. Если процедура Rewrite используется для текстового файла, то к открываемому новому набору данных в дальнейшем могут быть применимы только операции записи. Операция закрытия файла является логическим окончанием работы с любым открытым файлом. Для этого служит процедура Close (Var F); Использование процедуры Close позволяет устранить связь файловой переменной с внешним файлом, установленную с помощью процедуры Assign. Пример 2. Полная цепочка команд для создания простого текстового файла с именем WORK.TXT: … Var F: text; begin Assign(F, ' WORK. ТХТ') ; Rewrite(F) ; Write(F, 'Простой текстовый файл'); Close(F) ; end. К языковым средствам обслуживания файлов необходимо отнести процедуры переименования и удаления неоткрытых файлов. Использование этих процедур не зависит от типа файла. Rename(var F; NewName : string); Процедура переименовывает неоткрытый файл F любого типа. Новое имя задается строкой NewName. ] Erase(var F) ; Процедура удаляет неоткрытый внешний файл любого типа, задаваемый переменной F. Обе процедуры нельзя использовать для уже открытых файлов. Операции удаления и переименования осуществляются только для реально существующих файлов, иначе возникает ошибка выполнения программы. Пример 3. Удаление или переименование файла Var F: file ; Ch: char ; St: string; begin Write('Введите имя файла: '); Readln(St); {Чтение имени} Assign(F, St); {Назначить имя файловой переменной} Write('Удалить файл (У), Переименовать(П), Выход(В)'); Readln(Ch) ; case Ch of 'У ', ' y' : Erase(F); {Удаление файла} 'П','п' : begin Write('Введите новое имя файла: '); Readln(St) ; Rename(F, St); {Переименование файла} end; 'В','в' : Halt(1); end; end. В приведенном примере альтернативный выбор тех или иных действий зависит целиком от того, что будет введено с клавиатуры. Этот вариант программы не позволяет обработать ошибочные ситуации в случае, если файла с именем St не существует на диске. Для того чтобы файловые операции выполнялись без ошибок, необходимо использовать специальную функцию IOresult. Функция работает без параметров и возвращает значение типа integer, представляющее статус последней выполненной операции ввода-вывода. Использование этой функции в программах возможно лишь в том случае, если на время выполнения файловых операций отключена стандартная проверка операций ввода-вывода. Для этих целей используется либо специальная опция в интегрированной системе, либо директива компилятора {$I}, которая может задаваться внутри текста программы. Пример 4. Вариант программы для проверки существования файла на диске Var F: file ; St: string; begin Write('Введите имя файла : '); Readln(St) ; Assign(F, St) ; {$I-} {Отключить стандартную обработку ошибок} Reset(F); {Открыть файл} {$I+} {Включить стандартную обработку ошибок} if IOresult = 0 then begin Writeln('Файл существует и нормально открыт'); Close(F); {Закрыть файл} end else Writeln('Файла с именем '+St+' на диске нет'); end. После корректного выполнения операции ввода-вывода функция IOresult возвращает значение, равное нулю, в остальных случаях функция возвращает соответствующий код ошибки. Рассмотренные операции ввода-вывода охватывают все типы файлов в Турбо Паскале и характеризуют взаимоотношения файловой и операционной систем. Итак, для работы с любым типом файлов используются следующие процедуры и функции:
Текстовые файлы Текстовые файлы представляют собой совокупность символов, разделенных на строки, причем в конце каждой строки стоит признак конца строки. Особенностью работы с текстовыми файлами является то, что параметры, значения которых вводятся и выводятся с помощью процедур READ или WRITE, могут быть не только типа String или Char, но и других типов (целых, вещественных - при вводе, целых, вещественных, логических - при выводе). При работе с текстовыми файлами необходимо, прежде всего, объявить соответствующую файловую переменную: Var F:text; Начало работы с текстовым файлом - стандартное: файловой переменной ставится в соответствие имя файла (процедура Assign), а затем открывается новый текстовый файл (процедура Rewrite) или открывается существующий текстовый файл (процедура Reset). Далее в таблице представлены процедуры и функции для работы с текстовыми файлами.
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|